浅谈黑盒识别Fastjson/Jackson组件
字数 1256 2025-08-06 21:48:48

黑盒识别Fastjson与Jackson组件的技术方法

一、Fastjson与Jackson组件概述

在Java生态系统中,Fastjson和Jackson是两个最常用的JSON处理库,它们都存在着各种版本的安全漏洞(如反序列化漏洞、DDOS漏洞等)。因此,在安全测试中准确识别目标系统使用的是哪个JSON处理组件及其版本至关重要。

二、Fastjson识别方法

1. 报错信息特征识别

  • Fastjson特有错误格式:当发送畸形的JSON数据时,Fastjson会返回包含"com.alibaba.fastjson.JSON"的错误堆栈
  • 示例测试:发送不完整的JSON数据如{"test":,观察返回错误

2. 特定语法测试

  • 单引号支持:Fastjson默认支持单引号的key,而Jackson需要额外配置
    {'test':'value'}
    
  • 注释支持:Fastjson支持JSON中的注释(//或/* */),Jackson默认不支持
    {"test":"value"} // 这是一个注释
    

3. 自动类型识别特性

  • 发送包含特殊格式的JSON观察行为差异:
    {"@type":"java.net.Inet4Address","val":"dnslog"}
    
    Fastjson会尝试反序列化,而Jackson会直接报错

4. 版本探测技巧

  • 通过构造特定payload触发不同版本特有的错误信息
  • 使用@type特性探测版本范围(某些类型只在特定版本支持)

三、Jackson识别方法

1. 报错信息特征

  • Jackson的错误堆栈中通常包含"com.fasterxml.jackson"包名
  • 示例错误特征:
    com.fasterxml.jackson.databind.exc.InvalidDefinitionException
    

2. 多态类型处理测试

  • Jackson需要显式开启多态类型处理,而Fastjson默认支持
  • 测试payload:
    {"@type":"com.zaxxer.hikari.HikariConfig"}
    
    Jackson默认会拒绝,除非配置了DefaultTyping

3. 特殊字符处理

  • Jackson对JSON格式要求更严格,例如:
    • 不接受单引号key
    • 不接受注释
    • 对尾随逗号敏感

4. 版本探测方法

  • 通过触发特定版本才有的错误信息
  • 利用Jackson特有的特性如@JsonCreator等注解测试

四、综合识别流程

  1. 初始探测:发送标准JSON请求,观察正常响应
  2. 错误触发:发送畸形JSON,分析错误堆栈
  3. 语法测试
    • 测试单引号key
    • 测试JSON注释
    • 测试尾随逗号
  4. 高级特性测试
    • @type特性测试
    • 多态类型处理测试
  5. 版本确认:根据特有错误或行为确认大致版本范围

五、防御与混淆

有些系统会刻意隐藏JSON库的标识信息,此时需要:

  • 尝试多种不同的畸形输入
  • 分析响应时间差异(不同库的解析器性能特征不同)
  • 检查HTTP头中的线索(如X-Powered-By等)
  • 测试边缘案例行为

六、安全建议

  1. 识别出具体组件和版本后,应检查该版本是否存在已知漏洞
  2. 对于Fastjson,特别注意@type特性导致的反序列化漏洞
  3. 对于Jackson,检查是否启用了不安全的DefaultTyping配置
  4. 无论使用哪个库,都应保持更新到最新安全版本

通过以上方法,安全测试人员可以有效地识别目标系统使用的JSON处理组件,为后续的漏洞测试和风险评估提供基础。

黑盒识别Fastjson与Jackson组件的技术方法 一、Fastjson与Jackson组件概述 在Java生态系统中,Fastjson和Jackson是两个最常用的JSON处理库,它们都存在着各种版本的安全漏洞(如反序列化漏洞、DDOS漏洞等)。因此,在安全测试中准确识别目标系统使用的是哪个JSON处理组件及其版本至关重要。 二、Fastjson识别方法 1. 报错信息特征识别 Fastjson特有错误格式 :当发送畸形的JSON数据时,Fastjson会返回包含"com.alibaba.fastjson.JSON"的错误堆栈 示例测试 :发送不完整的JSON数据如 {"test": ,观察返回错误 2. 特定语法测试 单引号支持 :Fastjson默认支持单引号的key,而Jackson需要额外配置 注释支持 :Fastjson支持JSON中的注释(//或/* * /),Jackson默认不支持 3. 自动类型识别特性 发送包含特殊格式的JSON观察行为差异: Fastjson会尝试反序列化,而Jackson会直接报错 4. 版本探测技巧 通过构造特定payload触发不同版本特有的错误信息 使用 @type 特性探测版本范围(某些类型只在特定版本支持) 三、Jackson识别方法 1. 报错信息特征 Jackson的错误堆栈中通常包含"com.fasterxml.jackson"包名 示例错误特征: 2. 多态类型处理测试 Jackson需要显式开启多态类型处理,而Fastjson默认支持 测试payload: Jackson默认会拒绝,除非配置了 DefaultTyping 3. 特殊字符处理 Jackson对JSON格式要求更严格,例如: 不接受单引号key 不接受注释 对尾随逗号敏感 4. 版本探测方法 通过触发特定版本才有的错误信息 利用Jackson特有的特性如 @JsonCreator 等注解测试 四、综合识别流程 初始探测 :发送标准JSON请求,观察正常响应 错误触发 :发送畸形JSON,分析错误堆栈 语法测试 : 测试单引号key 测试JSON注释 测试尾随逗号 高级特性测试 : @type 特性测试 多态类型处理测试 版本确认 :根据特有错误或行为确认大致版本范围 五、防御与混淆 有些系统会刻意隐藏JSON库的标识信息,此时需要: 尝试多种不同的畸形输入 分析响应时间差异(不同库的解析器性能特征不同) 检查HTTP头中的线索(如X-Powered-By等) 测试边缘案例行为 六、安全建议 识别出具体组件和版本后,应检查该版本是否存在已知漏洞 对于Fastjson,特别注意 @type 特性导致的反序列化漏洞 对于Jackson,检查是否启用了不安全的 DefaultTyping 配置 无论使用哪个库,都应保持更新到最新安全版本 通过以上方法,安全测试人员可以有效地识别目标系统使用的JSON处理组件,为后续的漏洞测试和风险评估提供基础。