PHP反序列化 代碼執行


1. 漏洞文件vul.php代碼如下圖,考慮如何利用:(本地測試)

2. 背景知識:

     PHP中有一些特殊函數可以自動調用,即它們不需要其它函數的調用即可執行自己的代碼,考慮到這個特性,這些函數通常被稱為魔幻函數或魔幻方法。

     最常用的魔幻函數是__construct(),因為PHP版本5中,__construct方法實際上是你所定義的類的構造函數。對於一個給定的類,如果PHP 5找不到   __construct()函數,那么它將搜索一個與類名字相同的函數,這是PHP中編寫構造器的老方法,這種方法中你只需要定義一個名字與類名相同的函數。

     下面是PHP中的一些魔幻函數:

  __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(),     __invoke(), __set_state(), __clone(), __autoload().

3. 利用過程:

漏洞代碼中,接受參數作為文件名並讀取,然后反序列化。

我們在web目錄下准備test.php文件,內容如下圖:

編寫serial.php文件對其進行序列化,並把結果寫入到test.txt中,代碼如下圖:

test.txt內容如下:

然后訪問漏洞文件:http://localhost/vul.php?filename=test.txt

成功訪問后,test2.txt中會被寫入323232

因為漏洞文件的AA類中的__destruct函數被自動執行了(具體原理應該是unserialize函數執行時觸發的一些操作,沒深入研究)。

 

如果把test.php文件內容改為如下:

然后用serial.php進行序列並寫入到test.txt中,再次訪問漏洞文件:http://localhost/vul.php?filename=test.txt

此時,會在web目錄下生成test2.php文件,訪問后執行里面的代碼。進一步利用可以獲取webshell

 

利用反序列化漏洞的前提:

unserialize()函數的參數可控;

php文件中存在可利用的類,類中有魔術方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM