如果你是冲着 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。运行方式:
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]]
其中
包含以下 marshaller 的 payload 生成器:
无需先决条件。
先决条件:
要加载的服务目前被硬编码为 javax.script.ScriptEngineFactory。
先决条件:
先决条件:
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.jndi.(LDAP|RMI)RefServer <codebase>#<class> [<port>]
运行测试时(通过 maven 或使用 -a),有若干系统属性可以控制参数:
测试运行时会安装一个 SecurityManager,用于检查系统命令执行以及来自远程 codebase 的代码执行。 为此,所使用的已加载类必须触发某些安全管理器检查。
| Marshaller | Gadget 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 |