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

相关文章
相关标签/搜索