php反序列化漏洞我本身也不太懂,看到大佬们的资料,自己进行小结一下
漏洞原因
php反序列化漏洞的原因是unserialize函数的参数可控,如果反序列化对象中存在魔术方法,如:__construct()构造函数,__destruct()析构函数,__call()调用不可访问的方法 等等,而魔术方法的代码可以被控制,漏洞由此产生。
根据不同代码导致各种攻击,如代码注入,目录遍历等等
漏洞源代码
<?php
class A{
var $a="test";
function __destruct(){
$fp=fopen(dirname(__FILE__)."/save.php","w");
fputs($fp,$this->a);
fclose($fp);
}
}
//$a=new A();
//echo serialize($a);
$test=$_POST['test'];
$test_unset=unserialize($test);
?>
destruct魔术方法,当一个对象被销毁时进行自动调用,函数serialize为序列化函数
进行访问
序列化之后O代表对象,A代表类名,a是类实例化之后的对象
由此可以构造payload
okpayload将生成在save.php文件下。
进行访问,成功利用。
成功参考资料
网友评论