class myclass
{
private $question1 = 'aaa';
private $question2 = "bbb";
private $answer = 'flag';
function __construct()
{
//...
}
function __destruct()
{
echo "...destruct!!!<br>";
eval($this->question2);
}
function __wakeup()
{
echo "wake...<br>";
foreach(get_object_vars($this) as $k => $v) {
$this->$k = null;
}
}
}
需要用到反序列化的知识
做web题有个本地环境的搭建还是很有必要的
test = new myclass();
$test1 = serialize($test)."<br>";
echo $test1."<br>";
用上面的代码测试一下我们可以发现序列化相当于把一个对象变成了一个字符串
查阅资料知wakeup会在我们对上面那个字符串做反序列化的时候调用
因此如何绕过wakeup显的尤为重要 继续查阅资料发现他是个漏洞(现在已被修复,漏洞影响php版本5 5.6.25和php版本7 <7.0.10)
phpstudy搞起来
搭环境,绕过
参考
加号->%2b
private反序列化会给类名前后+%00在回显里并不能看到 这个要注意