我爱编程

php反序列化漏洞

2018-04-10  本文已影响46人  CSeroad

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

ok

payload将生成在save.php文件下。

进行访问,成功利用。

成功

参考资料

https://www.waitalone.cn/php-serialize-inject.html

http://www.cnbraid.com/2016/unserialize.html

上一篇 下一篇

猜你喜欢

热点阅读