Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
marshalsec — Java 反序列化漏洞利用工具,包含针对多种编组器(Jackson、XStream、SnakeYAML)的载荷生成器,并利用 JNDI 引用间接实现远程代码执行。 | Kitploit
工具/GitHubGitHub/mbechler/marshalsec
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试论文与研究学习与教育红队Payload 开发
GitHubmbechler/marshalsec

marshalsec

Java 反序列化漏洞利用工具,包含针对多种编组器(Jackson、XStream、SnakeYAML)的载荷生成器,并利用 JNDI 引用间接实现远程代码执行。

查看仓库
3.7k6781年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Java 反序列化安全 - 将你的数据变成代码执行

如果你是冲着 Log4Shell/CVE-2021-44228 来的,你可能想阅读关于 利用向量以及受影响的 Java 运行时版本的内容: https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/

论文

距离 Chris Frohoff 和 Garbriel Lawrence 发表他们关于 Java 对象反序列化漏洞的研究已经过去两年多,这些研究最终导致了可以说是 Java 历史上最大规模的一波远程代码执行漏洞。

对此问题的研究表明,这些漏洞并非仅存在于像 Java 序列化或 XStream 这样表达能力强的机制中,其中一些可能也适用于其他机制。

本文对各种 Java 开源编组库进行了分析(包括利用细节),这些库允许对任意、由攻击者提供的类型进行解组(unmarshal),并表明无论这一过程如何执行、存在何种隐式约束,它都容易受到类似利用技术的攻击。

完整论文请见 marshalsec.pdf

免责声明

所有信息和代码仅供教育目的和/或测试你自己的系统是否存在这些漏洞之用。

使用方法

需要 Java 8。使用 maven 构建:mvn clean package -DskipTests。运行方式:

root@kitploit:~
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]]

其中

  • -a - 为该 marshaller 生成/测试所有 payload
  • -t - 以测试模式运行,在生成 payload 后对其执行解组(unmarshal)
  • -v - 详细(verbose)模式,例如在测试模式下也显示生成的 payload
  • gadget_type - 特定 gadget 的标识符;若省略,则显示该 marshaller 可用的 gadget
  • arguments - gadget 特定参数

包含以下 marshaller 的 payload 生成器:

参数和其他先决条件

系统命令执行

  • cmd - 要执行的命令
  • args... - 作为参数传递的附加参数

无需先决条件。

远程类加载(普通)

  • codebase - 远程 codebase 的 URL
  • class - 要加载的类

先决条件:

  • 搭建一个 Web 服务器,在某个路径下托管 Java classpath。
  • 要加载的已编译类文件必须按照 Java classpath 约定来提供。

远程类加载(ServiceLoader)

  • service_codebase - 远程 codebase 的 URL

要加载的服务目前被硬编码为 javax.script.ScriptEngineFactory。

先决条件:

  • 与普通远程类加载相同。
  • 另外还需要在 /META-INF/javax.script.ScriptEngineFactory 处提供 provider-configuration 文件,其中以纯文本形式包含目标类名。
  • 其中指定的目标类需要实现服务接口 javax.script.ScriptEngineFactory。

JNDI Reference 间接引用

  • jndiUrl - 用于触发查找的 JNDI URL

先决条件:

  • 搭建远程 codebase,与远程类加载相同。
  • 运行一个指向该 codebase 的 JNDI reference 重定向服务—— 其中包含两个实现:marshalsec.jndi.LDAPRefServer 和 RMIRefServer。
    root@kitploit:~
    java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.jndi.(LDAP|RMI)RefServer <codebase>#<class> [<port>]
    
  • 使用 (ldap|rmi)://host:port/obj 作为 jndiUrl,指向该服务的监听地址。

运行测试

运行测试时(通过 maven 或使用 -a),有若干系统属性可以控制参数:

  • exploit.codebase,默认值为 http://localhost:8080/
  • exploit.codebaseClass,默认值为 Exploit
  • exploit.jndiUrl,默认值为 ldap://localhost:1389/obj
  • exploit.exec,默认值为 /usr/bin/gedit

测试运行时会安装一个 SecurityManager,用于检查系统命令执行以及来自远程 codebase 的代码执行。 为此,所使用的已加载类必须触发某些安全管理器检查。

下载工具
MarshallerGadget Impact
BlazeDSAMF(0|3|X)仅需 JDK 即可升级为 Java 序列化
各种第三方库 RCE
Hessian|Burlap各种第三方 RCE
Castor依赖库 RCE
Jackson可能仅需 JDK 的 RCE,各种第三方 RCE
Java又一个第三方 RCE
JsonIO仅需 JDK 的 RCE
JYAML仅需 JDK 的 RCE
Kryo第三方 RCE
KryoAltStrategy仅需 JDK 的 RCE
Red5AMF(0|3)仅需 JDK 的 RCE
SnakeYAML仅需 JDK 的 RCE
XStream仅需 JDK 的 RCE
YAMLBeans第三方 RCE