FastJson版本差异以及绕WAF的思路
字数 1361 2025-08-10 12:18:01
FastJson版本差异与WAF绕过技术深度分析
一、FastJson基础原理
FastJson是阿里巴巴开源的高性能JSON处理库,在反序列化过程中存在潜在安全风险。其核心处理流程如下:
- DefaultJSONParser#parseObject:入口方法,负责解析JSON字符串
- ObjectDeserializer:通过
config.getDeserializer(type)获取反序列化器 - checkAutoType机制:安全校验核心,不同版本实现有差异
二、版本演进与安全修复
1.2.24版本
- 引入
checkAutoType机制 - 默认关闭
autoTypeSupport - 使用黑名单机制
- 添加黑名单管理接口
1.2.41版本
- 黑名单进行hash处理防止直接绕过
ParserConfig#checkAutoType中去除L;后缀- 绕过方式:双写类名(如
LLcom.example.EvilClass;;)
1.2.42版本
- 检测多个
L抛出异常 - 新绕过方式:使用
[前缀(如[com.example.EvilClass)
1.2.43版本
- 修复
[前缀绕过漏洞
1.2.45版本
- 修复
org.apache.ibatis.datasource.jndi.JndiDataSourceFactory黑名单绕过
1.2.47版本
- 修复
Class.class绕过:- 设置
Cache为false loadClass重载方法默认不缓存- 防止通过Class提前缓存恶意类名
- 设置
1.2.50-1.2.51版本
- 添加
RowSet.class过滤 - 将
oracle.jdbc.rowset.OracleJDBCRowSet加入黑名单
1.2.68版本
- 将
java.lang.AutoCloseable加入黑名单
1.2.80版本
- 进一步扩展黑名单内容
三、WAF绕过思路
1. 编码绕过
- Unicode编码
- Hex编码
- Base64编码
- 特殊字符插入(如空白字符、注释等)
2. 语法变形
- 改变JSON键值顺序
- 添加无意义字段
- 使用不同引号风格
3. 类名混淆
- 使用反射间接引用类
- 通过ClassLoader动态加载
- 利用中间类间接触发
4. 上下文利用
- 结合应用已有类进行二次利用
- 通过合法操作链触发恶意行为
四、防御建议
- 版本升级:始终使用最新稳定版本
- 关闭autoType:确保
autoTypeSupport为false - 自定义黑名单:根据业务补充黑名单
- 输入过滤:对JSON输入进行严格校验
- 沙箱环境:在隔离环境中处理不可信JSON
- WAF规则:针对已知绕过方式制定防护规则
五、实战检测方法
- 版本识别:通过报错信息或特性检测确定FastJson版本
- 根据版本选择对应的测试Payload
- 使用DNSLog等工具验证漏洞存在性
- 逐步尝试各种绕过技术
六、研究资源
- 持续关注FastJson官方安全公告
- 分析GitHub提交记录中的安全修复
- 收集公开漏洞利用代码(PoC)
- 参与安全社区讨论获取最新绕过技术
通过深入理解FastJson各版本差异和安全机制演变,安全研究人员可以更有效地发现潜在漏洞,同时帮助开发人员构建更安全的JSON处理方案。