Web_XCTF_WriteUp | unserialize3
题目
分析
根据题目指向,这题是反序列化漏洞。
分析代码:
class xctf{ public $flag = '111'; // 变量flag初始化为111 public function __wakeup(){ // “__wakeup”:PHP魔术方法,在序列化后立即被调用 exit('bad requests'); // 输出“bad requests” } ?code= // 不完整
代码中的 “__wakeup” 函数
显然题示代码并不完整,括号未闭合,代码里也未出现 unserialize() 函数。
我们构造序列化代码,命名为 serialize.php,代码如下:
<?php class xctf{ public $flag = '111'; public function __wakeup(){ exit('bad requests'); } } // 创建新对象用于序列化xctf函数 $serxctf = new xctf(); echo(serialize($serxctf)); ?>
安装并配置 phpStudy,运行 serialize.php,得到序列化值:
如果直接将序列化值传入 code,则会直接触发 “__wakeup” 函数:
因此需要绕开 “__wakeup” 函数,这里我们将数据类型 O 改为 z 使字符串被回收:
得到 flag。
Flag
cyberpeace{b2ab1035acae9b3d153389706cc2296c}
参考
PHP 代码审计-CTF Wiki
PHP中private、public、protected的区别详解-周伯通之草堂-博客园
PHP反序列化漏洞-LuckySec
(简单实用小技巧)在浏览器如何打开php文件-✧* ꧁柠檬ヤ汽水꧂✧*-CSDN
PHP 序列化(serialize)格式详解-leonzhang2008-CSDN
绕过__wakeup() 反序列化 合集-Jay 17-CSDN
本文作者:Guanz
本文链接:https://www.cnblogs.com/Guanz/p/17867051.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
标签:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步