反序列化原理与风险:Java/PHP/.NET 反序列化漏洞原理、Gadget链、防御方法。
写在前面:合法学习边界
反序列化攻击只在授权测试环境进行。
一、反序列化攻击链

1
| ① 序列化 → ② 网络传输/存储 → ③ 反序列化 → ④ 触发恶意代码 → ⑤ RCE
|
二、Java 反序列化
1
2
| ObjectInputStream.readObject() → 触发 readObject() 方法
→ 调用 Gadget 链 → Runtime.exec() → RCE
|
三、PHP 反序列化
1
2
| unserialize($_GET['data']);
__wakeup() / __destruct() / __toString() 魔术方法触发 RCE
|
四、防御方法
1
2
3
4
| 白名单:只允许反序列化可信类
签名验证:序列化数据加签名
使用 JSON 替代:避免二进制序列化
升级框架:修复已知 Gadget 链
|
五、小结
反序列化漏洞本质是不可信数据被反序列化。防御核心是不反序列化不可信数据。