❤️博客主页: iknow181
🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP
🎉欢迎大家点赞👍收藏⭐评论✍
背景
在日常漏洞复核中,我们常用 DNSLog 平台判断目标是否存在 SSRF 漏洞:只要请求体里带一个可控域名,就能收到一次 DNS 查询。然而,当目标使用了 CDN(如 Cloudflare、Akamai、阿里云 CDN 等)时,你会发现:
- 无论路径是否命中业务逻辑,只要请求体里出现域名,DNSLog 都会收到解析。
- 查询源 IP 全部是 CDN 出口段,导致你无法区分到底是“真·SSRF”还是“CDN 在扫域名”。
CDN 的“扫域名”行为
CDN 厂商为了安全和性能,往往在流量经过时会:
- 安全扫描(WAF/Threat Intel)
对请求体/请求头中的域名做一次 DNS 查询,判断是否在恶意域名库里。 - 资源预取/链接优化
对响应体里的外部资源链接做预取或缓存可用性检查,也会触发 DNS 解析。
结论:纯粹的 DNS 查询(protocol=dns
)很可能是 CDN 在做“探测”,而不是真正的后端 HTTP 请求。
精准检测 SSRF:Interactsh OOB 回调
要区分“CDN 探测”与“真实 SSRF”,就要看目标服务器有没有真正发起 HTTP/TCP/Gopher 请求。
ProjectDiscovery 提供的 Interactsh 平台,能捕获多协议回调,正好满足需求。
- 支持协议:DNS、HTTP、TCP、Gopher、SMTP……
- 公共平台:
interact.sh
(零运维,上手快) - 自建服务:
interactsh-server
(高并发、私密可控)
Nuclei 中的 OOB 回调机制
- 在模板中声明 callbacks
callbacks: - "interactsh://{{.RAND}}.{{interactsh-url}}"
这一步告诉 Nuclei:
-
- 使用 Interactsh 协议
- 回调域名模板是
{{.RAND}}.{{.interactsh-url}}
- 扫描前自动向 OOB 平台注册,扫描后自动轮询回调日志
- 使用占位符
{{interactsh-url}}
-
- 默认会被替换为
interact.sh
(公共平台) - 或者被替换为自建服务域名(需配合
-iserver
/-itoken
)
- 默认会被替换为
- matchers 精准筛选协议
matchers:- type: wordpart: interactsh_protocolwords:- http- gopher- tcp
仅当后端真正发起 HTTP、Gopher 或 TCP 连接时才算“命中”。
CDN 的纯 DNS 探测(protocol=dns
)会被自动过滤掉。
公共平台 vs 自建服务
特性 | 公共 | 自建 Interactsh |
运维成本 | 零 | 需部署、运维 |
并发 & 稳定性 | 共享资源,可能有速率限制 | 高并发、自定义资源 |
隐私 & 安全 | 回调日志公开(所有用户共用) | 私密可控 |
上手速度 | 秒级启动 | 需安装 Go 环境、配置启动脚本 |
自建启动示例
# 安装
go install github.com/projectdiscovery/interactsh/cmd/interactsh-server@latest# 启动
interactsh-server -listen 0.0.0.0:9999 -domain yourdomain.com
运行 Nuclei 时加上:
nuclei \-t ssrf-http.yaml \-l targets.txt \-iserver https://yourdomain.com \-itoken YOUR_TOKEN \-rate-limit 50
完整模板示例
id: ssrf-http-detectinfo:name: SSRF HTTP/Gopher Detectionauthor: YourNameseverity: mediumdescription: |使用 Interactsh 回调,区分 CDN 探测(仅 DNS)与真实 SSRF(HTTP/TCP/Gopher)。variables:CALLBACK: "{{interactsh-url}}"RAND: "{{random 6}}"requests:- raw:- |GET http://{{.RAND}}.{{.CALLBACK}}/test HTTP/1.1Host: {{Hostname}}- |GET gopher://{{.RAND}}.{{.CALLBACK}}/_ HTTP/1.1Host: {{Hostname}}callbacks:- "interactsh://{{.RAND}}.{{.CALLBACK}}"matchers:- type: wordpart: interactsh_protocolwords:- http- gopher- tcp
{{random 6}}
:生成 6 位随机前缀,避免子域名冲突{{.CALLBACK}}
:运行时自动替换为interact.sh
或自建域名matchers
:只匹配http
/gopher
/tcp
,过滤掉纯 DNS 探测
推荐扫描流程
- DNS 初筛(可选)
callbacks:- "dns://{{random 6}}.{{interactsh-url}}"
快速判断哪些目标“有域名解析行为”。
- HTTP 深筛
使用上面的完整模板,只保留 HTTP/Gopher/TCP 回调,精准识别真实 SSRF。
总结
- CDN 扫描 ≠ SSRF:纯 DNS 回调通常是 CDN/WAF 在探测。
- Interactsh 回调:能捕获多协议回调,区分“解析”与“连接”。
- Nuclei 配置:
-
callbacks
+{{interactsh-url}}
自动注册、轮询matchers
只匹配 HTTP/Gopher/TCP- 公共平台无需额外参数,自建服务用
-iserver
/-itoken
按此方法批量扫描,既能高效初筛,也能精准复核,最大限度减少误报,只留下真正的 SSRF 漏洞。欢迎点赞、评论与分享!