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

 

posted @ 2019-05-30 20:23  爪爪**  阅读(1516)  评论(0编辑  收藏  举报