PHP反序列化漏洞

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

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

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

魔術方法:spa

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

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

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

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

__wakeup將在序列化以後當即被調用function

 

序列化數據格式:class

示例:

<?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()):

相關文章
相關標籤/搜索