真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么淺析phar反序列化漏洞攻擊及實戰(zhàn)

怎么淺析phar反序列化漏洞攻擊及實戰(zhàn),很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、突泉網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場景定制、商城建設(shè)、集團公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為突泉等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

前言

phar反序列化漏洞很久之前就開始接觸了;因為當時出了點問題導(dǎo)致一直無法成功,所以當時直接去學習其他的漏洞了;今天覺得是時候把這個漏洞補上去了;

漏洞成因

phar文件會以序列化的形式存儲用戶自定義的meta-data;該方法在文件系統(tǒng)函數(shù)(file_exists()、is_dir()等)參數(shù)可控的情況下,配合phar://偽協(xié)議,可以不依賴unserialize()直接進行反序列化操作

原理分析

phar的組成

通過查閱手冊發(fā)現(xiàn)phar由四部分組成;翻閱手冊可以知道,phar由四個部分組成,分別是stub、manifest describing the contents、 the file contents、 [optional] a signature for verifying Phar integrity (phar file format only) 下面進行解釋一下;

1 .0  a stub

標識作用,格式為xxx,前面任意,但是一定要以__HALT_COMPILER();?>結(jié)尾,否則php無法識別這是一個phar文件;

2 .0  a manifest describing the contents

其實可以理解為phar文件本質(zhì)上是一中壓縮文件,其中包含有壓縮信息和權(quán)限,當然我們需要利用的序列化也在里面;

怎么淺析phar反序列化漏洞攻擊及實戰(zhàn)

圖片選自于 seebug

3 .0 the file contents

這里指的是被壓縮文件的內(nèi)容;

4 .0 [optional] a signature for verifying Phar integrity (phar file format only)

簽名,放在結(jié)尾;

試驗

這里引用開心師傅給的一個實例;來進行生成;

startBuffering();
    $phar->setStub(""); //設(shè)置stub
    $o = new TestObject();
    $phar->setMetadata($o); //將自定義的meta-data存入manifest
    $phar->addFromString("test.txt", "test"); //添加要壓縮的文件
    //簽名自動計算
    $phar->stopBuffering();
?>

然后在服務(wù)器之下運行,發(fā)現(xiàn)成功生成phar文件;

怎么淺析phar反序列化漏洞攻擊及實戰(zhàn)

然后打開這個phar文件,我們發(fā)現(xiàn)已經(jīng)成功;并且數(shù)據(jù)的存儲方式是以序列化的方式存儲的;

那么既然有序列化,那么就一定有反序列化,php的很多文件系統(tǒng)函數(shù)在通過phar://偽協(xié)議解析phar文件的時候。都會將mate-data進行反序列化。

將phar偽造為其他類型的文件

前面在講的時候已經(jīng)介紹了phar的四個部分,這里注意到第一個部分stub;因為這個部分的存在,縱然我們修改了phar后綴,服務(wù)器讀取到stub的時候依然會當作phar文件;再準確點講就是下面的代碼;(二進制的編譯器有點問題,簡單用記事本來看看;)也還是可以發(fā)現(xiàn)是以序列化形式存儲的;

怎么淺析phar反序列化漏洞攻擊及實戰(zhàn)

實戰(zhàn)

拿一道 SWPUCTF 中的一道題目來講;進去就發(fā)現(xiàn)了包含漏洞,然后直接讀取源碼,發(fā)現(xiàn)并沒有對phar進行過濾;而且源代碼里有提示,所以差不多實錘了,就是phar反序列化漏洞了;

直接來對關(guān)鍵的代碼進行分析;class.php

這里面看到有三個類,再明顯不過了,這就是主要的pop鏈的構(gòu)造處;然后發(fā)現(xiàn)了危險的函數(shù) file_get_contents();那看來就是利用這個讀源碼了;

怎么淺析phar反序列化漏洞攻擊及實戰(zhàn)

一步步分析;先看到C1e4r這個類里面有echo;那要利用echo;以達到輸出字符串的目的;

怎么淺析phar反序列化漏洞攻擊及實戰(zhàn)

然后看到show類里有一個 __toString()方法,這個方法在對象被轉(zhuǎn)化為字符串的時候會自動調(diào)用;比如進行echo print的時候會進行調(diào)用并返回一個字符串;

怎么淺析phar反序列化漏洞攻擊及實戰(zhàn)

然后審計Test類,發(fā)現(xiàn)file_get_contents()函數(shù),那就是利用了;一步一步向前追溯  file_get->get->__get();這里主要還是調(diào)用__get()方法;

那么這里思路差不多清晰了;簡單來講;在test類中要調(diào)用__get方法,那么觸發(fā)這個方法我們需要在show類里尋,因為這個類里面運用了source屬性,所以只需要將 str['str'] 賦值為 Test類就可以,那么觸發(fā) __toString()方法就需要用到我們的第一個類里面的echo了;

那么思路清晰就構(gòu)造處pop鏈;

exp編寫

怎么淺析phar反序列化漏洞攻擊及實戰(zhàn)

生成phar文件,改后綴為gif繞過限制,上傳之后進入upload目錄之下(或者根據(jù)源代碼算出上傳后的文件名),復(fù)制文件名到讀取文件的窗口讀取   file=phar://xxxxxx.jpg然后得到base64的編碼解碼就好;

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。


文章名稱:怎么淺析phar反序列化漏洞攻擊及實戰(zhàn)
當前地址:http://weahome.cn/article/geijsj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部