反序列化原理与风险

反序列化原理与风险: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 链

五、小结

反序列化漏洞本质是不可信数据被反序列化。防御核心是不反序列化不可信数据