PHP反序列化漏洞


原理未對用戶輸入的序列化字符串進行檢測,導致攻擊者可以控制反序列化過程,從而導致代碼執行,SQL注入,目錄遍歷等不可控后果

在反序列化的過程中自動觸發了某些魔術方法。

漏洞觸發條件unserialize函數的變量可控,php文件中存在可利用的類,類中有魔術方法

魔術方法:

__construct()當一個對象創建時被調用

__destruct()當一個對象銷毀時被調用

__toString()當一個對象被當作一個字符串使用

__sleep() 在對象在被序列化之前運行

__wakeup將在序列化之后立即被調用

 

序列化數據格式:

示例:

<?php
class Example {
    var $var = '';
    function __destruct() {
        eval($this->var);
    }
}
unserialize($_GET['a']);
?> 

 

接下來構造序列化數據:a=O:4:"test":1:{s:1:"b";s:10:"phpinfo();";}

成功顯示了phpinfo頁面:在反序列化該數據時,自動觸發了_destruct()函數,執行 eval(phpinfo()):

 


免責聲明!

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



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