專業(yè)軟件下載站,為您提供無(wú)病毒無(wú)木馬的純凈綠色軟件

下載排行榜

教程信息

利用PHAR協(xié)議進(jìn)行PHP反序列化攻擊

發(fā)布時(shí)間:2021-06-29
PHAR ( "Php ARchive" ) 是 PHP 中的打包文件,相當(dāng)于 Java 中的 JAR 文件,在 php5.3 或者更高的版本中默認(rèn)開(kāi)啟。PHAR 文件缺省狀態(tài)是只讀的,當(dāng)我們要?jiǎng)?chuàng)建一個(gè) Phar 文件需要修改 php.ini 中的 phar.readonly,修改為:phar.readonly = 0
 
當(dāng)通過(guò) phar:// 協(xié)議對(duì) phar 文件進(jìn)行文件操作時(shí),將會(huì)對(duì) phar 文件中的 Meta-data 進(jìn)行反序列化操作,可能造成一些反序列化漏洞。
 
本文由錦行科技的安全研究團(tuán)隊(duì)提供,從攻擊者的角度展示了 PHAR 反序列化攻擊的原理和過(guò)程。
 
PHAR 文件結(jié)構(gòu)
 
stub phar:文件標(biāo)識(shí),格式為 xxx
 
manifest:壓縮文件的屬性等信息,其中的 Meta-data 會(huì)以序列化的形式存儲(chǔ)。
 
利用PHAR協(xié)議進(jìn)行PHP反序列化攻擊
contents:壓縮文件的內(nèi)容
 
signature:簽名,放在文件末尾
 
生成 PHAR 文件
 
生成程序如下:
利用PHAR協(xié)議進(jìn)行PHP反序列化攻擊
 
生成 phar 文件,使用 16 進(jìn)制工具查看,可以看到 Meta-data 中的序列化對(duì)象
 
利用PHAR協(xié)議進(jìn)行PHP反序列化攻擊
測(cè)試反序列化
 
測(cè)試程序如下:
 
利用PHAR協(xié)議進(jìn)行PHP反序列化攻擊
運(yùn)行結(jié)果,可以看到打印了‘ test ’,證明對(duì)象被反序列化創(chuàng)建后銷毀。
 
雖然在創(chuàng)建 PHAR 文件時(shí)后綴是固定的,但完成創(chuàng)建后我們是可以修改 phar 的后綴名的,例如修改成 .jpg,當(dāng)執(zhí)行 include ( 'phar://phar.jpg' ) ; 時(shí)也可觸發(fā)反序列化。
 
幾乎所有文件操作函數(shù)都可觸發(fā) phar 反序列化
 
利用PHAR協(xié)議進(jìn)行PHP反序列化攻擊
CTF 演示
 
題目地址: [ CISCN2019 華北賽區(qū) Day1 Web1 ] Dropbox(鏈接:https://buuoj.cn/challenges#%5BCISCN2019%20%E5%8D%8E%E5%8C%97%E8%B5%9B%E5%8C%BA%20Day1%20Web1%5DDropbox)
 
進(jìn)入題目后,隨意注冊(cè)賬號(hào)上傳文件,上傳點(diǎn)只能上傳圖片后綴
 
利用PHAR協(xié)議進(jìn)行PHP反序列化攻擊
點(diǎn)擊下載,有任意文件讀取,但是不能讀取 flag.txt
 
 
于是讀取網(wǎng)頁(yè)源碼,傳入 filename=../../xxx.php
 
detele.php
 
 
class.php
 
分析源代碼
 
可以看到刪除文件時(shí)使用了 File 類的 delete 函數(shù),F(xiàn)ile 類的 delete 使用了 unlink 函數(shù),可以觸發(fā) phar 反序列化。
 
繼續(xù)看到 class.php 的 File 類的 close ( ) 函數(shù)中調(diào)用了 file_get_contents 函數(shù),可以讀取文件。但是要怎么觸發(fā)呢,我們可以看到 FileList 的 __call 函數(shù),如果我們可以讓 FileList 參數(shù) files 為數(shù)組且數(shù)組中一個(gè)類為 File,只要有類可以執(zhí)行 $FileList->close ( ) ,就可以讀取文件并在 FileList 的析構(gòu)函數(shù)中顯示出來(lái)了。我們看到 User 類的析構(gòu)函數(shù),執(zhí)行了 $db->close ( ) 。so,我們讓 User 的 $db 參數(shù)等于 FileList 就行了。
 
利用鏈:User 類的 $db 賦值為 FileList 類,User 類的析構(gòu)函數(shù)執(zhí)行 close 方法 ->觸發(fā) FileList 的 __call 函數(shù),讓 $file 值為 File,執(zhí)行 $file 的 close 函數(shù) ->File 執(zhí)行 close 讀取文件,控制 $filename 為想讀取的文件 ->FileList 對(duì)象銷毀,執(zhí)行析構(gòu)函數(shù),回顯結(jié)果。
 
生成 phar 文件代碼:
 
 
生成 phar 文件,修改后綴為 jpg,上傳
 
刪除文件處修改 filename 為‘ phar://phar.jpg ’ , 讀取到 flag 文件
利用PHAR協(xié)議進(jìn)行PHP反序列化攻擊
本文鏈接地址: toyzillatrading.com/ddjc/ctjc/32466.html