WP CTF-Web 攻防世界 GFSJ0235 unserialize3
「场景」
进入场景:
「思路」
根据题目提示——反序列化
已知PHP在进行反序列化前,会检查是否存在__wakeup函数,若存在,则先调用该函数.
__wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。
改写场景提供的php,使用在线php运行环境执行:https://c.runoob.com/compile/1/
代码说明:
- $a=new xctf(); 创建一个新的xctf对象,赋给$a
- echo(serialize($a)); 打印$a序列化后的字符串
运行结果:O:4:"xctf":1:{s:4:"flag";s:3:"111";}
Tips:
序列化字符串格式:变量类型:变量长度:变量内容
如果序列化的是一个对象,序列化字符串格式为:
变量类型:类名长度:类名:属性数量:{属性类型:属性名长度:属性名;属性值类型:属性值长度:属性值内容}
故,上述php序列化的结果:
O
变量类型
4
类名长度(flag,4个字符)
"xctf"
类名
1
属性数量
此处涉及一个新知识:只要序列化的成员数大于实际成员数,即可绕过。
所以将序列化字符串改为 O:4:"xctf":2:{s:4:"flag";s:3:"111";}
现在我们有了可以绕过__wakeup方法的字符串,但是还缺少一个具体的php地址,因为直接将参数加在端口后是成功发送请求的。
一般默认页面为index.php,也可以通过扫描工具进行扫描,这里使用御剑得到具体请求地址。
使用这个字符串作为参数发起请求 http://61.147.171.105:54522/index.php?code=O:4:%22xctf%22:2:{s:4:%22flag%22;s:3:%22111%22;}
得到flag:the answer is : cyberpeace{c14019ee77c0e1870b7f63ccfede03c9}
「工具」
- php在线运行工具:https://c.runoob.com/compile/1/
「知识拓展」
参考资料:
https://www.python100.com/html/38250.html
__EOF__

本文链接:https://www.cnblogs.com/stonechen/p/GFSJ0235.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?