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