Skip to main content

java-deserialization-methodology

Java 反序列化漏洞检测与利用。当目标是 Java 应用(Tomcat/Spring/WebLogic/JBoss/Jenkins)、发现 rO0AB/aced0005 开头的 Base64 数据、HTTP 请求中有 application/x-java-serialized-object Content-Type、或存在 T3/IIOP/RMI/JNDI 协议端口时使用。覆盖 ysoserial gadget chain、JNDI 注入、Fastjson/Jackson 反序列化、Shiro rememberMe、常见中间件 CVE 利用

소스 정보

저장소
wgpsec/AboutSecurity
최근 소스 활동
2026년 10월 24일 13:17
감지된 SKILL.md 언어
중국어
스타
1,822
포크
253

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
5 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
java-deserialization-methodology
description
Java 反序列化漏洞检测与利用。当目标是 Java 应用(Tomcat/Spring/WebLogic/JBoss/Jenkins)、发现 rO0AB/aced0005 开头的 Base64 数据、HTTP 请求中有 application/x-java-serialized-object Content-Type、或存在 T3/IIOP/RMI/JNDI 协议端口时使用。覆盖 ysoserial gadget chain、JNDI 注入、Fastjson/Jackson 反序列化、Shiro rememberMe、常见中间件 CVE 利用
metadata
{"tags":"java,deserialization,反序列化,ysoserial,jndi,rmi,ldap,fastjson,jackson,shiro,weblogic,jboss,jenkins,log4j,gadget,rce","category":"exploit"}
# Java 反序列化漏洞方法论 Java 反序列化是 Java 生态中最危险的漏洞类之一——一旦成功通常直接 RCE。 ## ⛔ 深入参考(必读) - 需要 ysoserial gadget chain 优先级表、URLDNS 检测、payload 构造 → [references/ysoserial-gadgets.md](references/ysoserial-gadgets.md) - 需要 JNDI 注入、Fastjson 版本 payload、Shiro/WebLogic/JBoss/Jenkins 专项 → [references/jndi-fastjson.md](references/jndi-fastjson.md) --- ## Phase 1: 识别 Java 反序列化入口 ### 1.1 原生 Java 序列化数据(魔术字节) - 二进制:`\xac\xed\x00\x05`(hex: `aced0005`) - Base64 编码后:以 `rO0AB` 开头 - Gzip 压缩后再 Base64:以 `H4sIAAAA` 开头 **检查位置**:Cookie(`rememberMe`/`VIEWSTATE`)、POST Body、自定义 Header、WebSocket、RMI/T3/IIOP 协议端口 ### 1.2 JSON 反序列化(Fastjson/Jackson) - Fastjson:JSON 中含 `@type` 字段 → [references/jndi-fastjson.md](references/jndi-fastjson.md) - Jackson:启用了 `DefaultTyping` → JSON 中含类名数组 `["com.xxx.Class", {...}]` - 识别:发送畸形 JSON 观察错误堆栈中的库名 ### 1.3 特定中间件端口 | 端口 | 服务 | 漏洞方向 | |------|------|----------| | 7001/7002 | WebLogic | T3/IIOP 反序列化 | | 8009 | AJP (Tomcat) | GhostCat (CVE-2020-1938) | | 1099 | RMI Registry | RMI 反序列化 | | 8080 | JBoss HTTP | /invoker/JMXInvokerServlet 反序列化 | | 50000 | Jenkins | Jenkins CLI 反序列化 | ## Phase 2: 利用决策树 ``` 发现序列化入口 ├─ 原生序列化 (rO0AB/aced0005)? │ ├─ 先 URLDNS 确认漏洞存在 → [references/ysoserial-gadgets.md](references/ysoserial-gadgets.md) │ └─ 逐个尝试 CC1-7 → CommonsBeanutils → Spring → Groovy ├─ Fastjson (@type 字段)? │ └─ 识别版本 → 选择对应 payload → [references/jndi-fastjson.md](references/jndi-fastjson.md) ├─ Shiro (rememberMe=deleteMe)? │ └─ 默认密钥 kPH+bIxk5D2deZiIxcaaaA== → [references/jndi-fastjson.md](references/jndi-fastjson.md) └─ Log4j (Java 应用 + 用户输入)? └─ ${jndi:ldap://...} → [references/jndi-fastjson.md](references/jndi-fastjson.md) ``` ## 注意事项 - **先用 URLDNS 检测**,确认漏洞存在后再尝试命令执行 gadget - ysoserial 的 `Runtime.exec()` 不支持管道/重定向,需要 Base64 编码命令 - Java 版本影响 JNDI 利用方式(JDK < 8u191 最简单,8u191+ 需本地 Gadget) - 多个 gadget chain 逐一尝试,不同 classpath 环境适用不同 gadget
GitHub에서 보기