0x01.Marshalsec 是什么
Marshalsec 是一个用于研究和利用 Java 反序列化、JNDI 以及 RMI 安全问题的攻击与测试框架,由著名 Java 安全研究员 Moritz Bechler 开发。该工具并非传统意义上的“漏洞利用脚本”,而是一组可快速启动恶意服务端组件的集合,用于配合目标 Java 应用触发不安全的对象加载或反序列化行为。
从攻击视角看,Marshalsec 的核心价值在于:它实现了多种“恶意中间件服务”,用于在协议层面欺骗目标 JVM 主动执行攻击逻辑。
0x02 Marshalsec 解决的核心问题
在 Java 漏洞利用中,攻击者通常面临一个关键难点:如何让目标 JVM 在“看似正常的协议交互”中,执行攻击者的代码?
Marshalsec 的解决思路是:不直接向目标推送 payload 而是构造合法协议响应诱导 JVM 在反序列化 / JNDI 查找 / RMI 交互过程中自行加载并执行恶意对象或类。因此,Marshalsec 的本质并不是“发 payload”,而是扮演协议中的“可信服务端角色”。
0x03 Marshalsec 的整体架构思想
Marshalsec 采用模块化设计,不同模块对应不同的 Java 安全攻击面:
┌────────────┐│ 目标 JVM │└─────▲──────┘│┌─────────────────┼─────────────────┐│ │ │
RMI Registry LDAP Server JRMP Listener(JNDI) (JNDI) (RMI 序列化)
攻击者通过 Marshalsec 启动其中某一类服务,等待目标 JVM 主动连接并触发漏洞。
0x04 Marshalsec 的主要模块详解
JNDI 相关模块
(1)RMIRefServer
作用:启动一个恶意 RMI Registry,在 JNDI lookup 时返回包含远程 Codebase 的 Reference 对象。
攻击条件:
- JDK 版本允许远程 Codebase 加载
- com.sun.jndi.rmi.object.trustURLCodebase = true
- java.rmi.server.useCodebaseOnly = false
利用原理:
- 返回 ReferenceWrapper
- 指定 className
- 指定 codebase URL
- 目标 JVM 从 HTTP 服务器加载恶意类
(2)LDAPRefServer
作用:模拟一个恶意 LDAP 服务,在 JNDI 查询中返回可控的 LDAP Entry,触发远程类加载或对象实例化。
应用场景:
- Log4j2 LDAP 利用
- Spring JNDI 注入
- Fastjson JNDI 场景
RMI 反序列化模块
(1)JRMPListener
作用:监听 RMI JRMP 协议请求,并在反序列化阶段发送恶意序列化对象。
特点:
- 不依赖 JNDI
- 利用原生 Java RMI 序列化机制
- 常与 ysoserial gadget 链配合使用
HTTP Server 模块
作用:提供远程 Codebase,承载恶意 .class 文件。Marshalsec 本身并不强制内置 HTTP Server,通常配合:python3 -m http.server 8000或 Nginx / Apache 使用。
0x05 Marshalsec 与 ysoserial 的区别与关系
| 工具 | 关注点 |
|---|---|
| ysoserial | 构造反序列化 payload |
| marshalsec | 承载与投递 payload 的服务端 |
ysoserial 负责“造炸弹”,marshalsec 负责“引爆环境”。在实际利用中,两者经常组合使用。
0x06 Marshalsec 的典型使用场景
1.JNDI注入漏洞复现:Log4j2 JNDI RCE、Spring JNDI 注入、Weblogic JNDI 利用
2.Java 反序列化漏洞研究:RMI 接口反序列化、T3 协议利用、JRMP 利用链测试
3.安全研究与防护验证:验证 JDK 补丁效果、验证 trustURLCodebase 默认关闭后的防护能力、测试 WAF / RASP 对 JNDI 行为的拦截能力
0x07 Marshalsec 的安装方式
//源码编译
git clone https://github.com/mbechler/marshalsec.git
cd marshalsec
mvn clean package -DskipTests
//生成文件:target/marshalsec-*-SNAPSHOT-all.jar
0x08 Marshalsec的安全意义
Marshalsec 并非自动化攻击工具,而是 Java 安全研究中的基础设施组件。它通过实现恶意 RMI、LDAP、JRMP 等协议服务,揭示了 Java 在对象查找、远程加载和反序列化设计上的历史性安全问题。理解 Marshalsec 的工作原理,有助于从协议和 JVM 行为层面理解 JNDI 与反序列化漏洞的本质。