用途:用于 Java 反序列化漏洞的检测与利用,属于渗透测试中的漏洞利用方法论。
主要能力:一是识别入口,原生 Java 序列化数据魔术字节为 \xac\xed\x00\x05(hex: aced0005),Base64 编码后以 rO0AB 开头,Gzip 压缩再 Base64 以 H4sIAAAA 开头,常见位置包括 Cookie(rememberMe/VIEWSTATE)、POST Body、自定义 Header、WebSocket 以及 RMI/T3/IIOP 协议端口。JSON 反序列化方面,Fastjson 表现为 JSON 中含 @type 字段,Jackson 启用 DefaultTyping 时 JSON 中含类名数组,可通过发送畸形 JSON 观察错误堆栈中的库名来识别。中间件端口方向包括:7001/7002 WebLogic 对应 T3/IIOP 反序列化,8009 AJP(Tomcat)对应 GhostCat(CVE-2020-1938),1099 RMI Registry 对应 RMI 反序列化,1090/8500 JBoss JMX 对应 JMXInvokerServlet,50000 Jenkins 对应 Jenkins CLI 反序列化。
利用决策:发现原生序列化入口时先用 URLDNS 确认漏洞存在,再逐个尝试 CC1-7、CommonsBeanutils、Spring、Groovy 等 gadget;Fastjson 需识别版本后选择对应 payload;Shiro 表现为 rememberMe=deleteMe,涉及默认密钥 kPH+bIxk5D2deZiIxcaaaA==;Log4j 场景为 Java 应用加用户输入时使用 ${jndi:ldap://...}。
限制与注意事项:应先用 URLDNS 检测确认漏洞存在后再尝试命令执行 gadget;ysoserial 的 Runtime.exec() 不支持管道或重定向,需对命令进行 Base64 编码;Java 版本影响 JNDI 利用方式,JDK < 8u191 最简单,8u191+ 需本地 Gadget;不同 classpath 环境适用的 gadget chain 不同,需逐一尝试。完整 gadget 优先级表、JNDI、Fastjson 版本 payload 及 Shiro、WebLogic、JBoss、Jenkins 专项细节见对应 references 文档。