用途:用于授权安全测试中识别与利用不安全反序列化漏洞。核心思路是:应用在未校验类型、完整性与来源的情况下从序列化字节流重建对象,重建过程会触发构造器、终结器及语言级魔术方法,攻击者控制输入时常可导致代码执行。
主要能力:
- 识别特征:覆盖 Java ObjectInputStream(ac ed 00 05 / rO0AB)、PHP serialize(O:len:)、.NET BinaryFormatter(Base64 AAEAAAD/////)、Python pickle、Ruby Marshal、YAML 标签、Jackson、Json.NET "$type"、Java XMLDecoder 等格式。
- Java:识别 ObjectInputStream、XMLDecoder、XStream、Jackson 多态类型等 sink;处理 serialVersionUID 与 classpath 约束;使用 ysoserial 构造 CommonsCollections、Spring、Hibernate、CommonsBeanutils、URLDNS、JRMPClient 等链。
- PHP:识别 unserialize 与 phar:// 触发点;使用 phpggc 生成 Laravel、Symfony、Monolog、Guzzle、WordPress 等链,支持 -b、-s、-p phar 等参数及 polyglot 构造。
- .NET:识别 BinaryFormatter、LosFormatter、Json.NET TypeNameHandling;使用 ysoserial.net 生成 TypeConfuseDelegate、WindowsIdentity、PSObject 等载荷,以及 ViewState 注入。
- Python:pickle reduce 代码执行、yaml.load 反序列化、shelve、marshal、jsonpickle。
- Node.js:node-serialize IIFE($$ND_FUNC$$)、funcster。
- Ruby:Marshal.load、YAML.load 与 Rails 会话 cookie 伪造。
- 现代攻击面:Kubernetes 准入 webhook、消息队列消费者、Serverless 事件触发。
- 规避技术:双 Base64、gzip + Base64、URL 编码、Unicode 转义、Content-Type 操纵。
使用方式:先枚举接收不透明二进制或编码数据的入口(cookie、请求体、消息队列、上传、JMX/RMI 等),通过魔术字节、Content-Type 与错误行为识别格式,确定服务端语言与框架版本,选择匹配 classpath 的链生成载荷,先用 DNS 或 sleep 验证执行,再在授权下升级利用。常用命令包括 ysoserial、phpggc、ysoserial.net 等。
限制:仅限获得授权的安全测试;链选择依赖目标实际类路径与库版本,serialVersionUID 不匹配会导致失败;Jackson 等维护者持续更新拒绝名单,需关注绕过类;部分操作具有破坏性风险。