用途:面向安全测试人员,提供反序列化漏洞的检测、利用与防护方法论。原理是应用将不可信数据反序列化为对象时,攻击者可构造恶意序列化数据触发任意代码执行或拒绝服务。
涉及格式:Java 原生序列化、Jackson、Fastjson、XStream、Apache Commons Collections;PHP 的 unserialize()、json_decode();Python 的 pickle、yaml、json;.NET 的 BinaryFormatter、SoapFormatter、DataContractSerializer。
主要能力:识别序列化数据特征(Java 的 AC ED 00 05、Base64 的 rO0;PHP 的 O:8:"stdClass";Python pickle 的 \x80\x03);定位反序列化点(Cookie、Session、API 参数、文件上传、缓存、消息队列);构造利用链,如 Java 的 CommonsCollections1-7、Spring1-2、ROME、Jdk7u21,PHP 魔术方法 __destruct/__wakeup/__toString/__call 与 POP 链,Python pickle 的 reduce。
使用方式:Java 可用 java -jar ysoserial.jar CommonsCollections1 "command" > payload.bin 生成 Payload,并可用 base64 编码;PHP 可用 ./phpggc -l 列出链、./phpggc Monolog/RCE1 system id 生成 Payload,-b 输出编码版本;也可用 Burp Suite 拦截并替换序列化数据观察响应。绕过手段包括 Base64/URL 编码、更换 Gadget 链、反射调用等。
适用场景:授权渗透测试、漏洞验证与报告,报告需包含漏洞位置、数据格式、Gadget 链、完整 PoC 与修复建议。
限制与防护:仅在授权测试环境中进行;不同库版本 Gadget 链存在差异,需注意 Payload 大小限制并了解目标依赖版本。防护上应避免反序列化不可信数据、优先使用 JSON 等安全格式、对类名做白名单校验、隔离类加载器并记录监控反序列化操作。