子域接管测试
ID |
---|
WSTG-CONF-10 |
总结
成功利用此类漏洞允许攻击者声明并控制受害者的子域。此攻击依赖于以下内容:
- 受害者的外部 DNS 服务器子域记录配置为指向不存在或非活动资源/外部服务/终结点。XaaS(任何即服务)产品和公共云服务的激增提供了许多需要考虑的潜在目标。
- 托管资源/外部服务/终结点的服务提供商未正确处理子域所有权验证。
如果子域接管成功,则可能会发生各种攻击(提供恶意内容、网络钓鱼、窃取用户会话 Cookie、凭据等)。此漏洞可被利用用于各种 DNS 资源记录,包括:A
, CNAME
, MX
, NS
, TXT
等。就攻击严重性而言,NS
子域接管(尽管可能性较小)的影响最大,因为成功的攻击可能导致对整个 DNS 区域和受害者域的完全控制。
GitHub
- 受害者 (victim.com) 使用 GitHub 进行开发,并配置 DNS 记录 (
coderepo.victim.com
) 来访问它。 - 受害者决定将其代码存储库从 GitHub 迁移到商业平台,
coderepo.victim.com
并且不会从其 DNS 服务器中删除。
3.攻击者发现coderepo.victim.com
托管在 GitHub 上,并使用 GitHub 页面使用他们的 GitHub 帐户进行声明。
过期域名
- 受害者 (victim.com) 拥有另一个域 (victimotherdomain.com),并使用 CNAME 记录 (www) 引用另一个域 (
www.victim.com
-->victimotherdomain.com
) - 在某些时候,victimotherdomain.com 会过期,任何人都可以注册。由于 CNAME 记录不会从 victim.com DNS 区域中删除,因此在 DNS 记录存在
www.victim.com
之前,注册victimotherdomain.com
的任何人都可以完全控制。
测试目标
- 枚举所有可能的域(以前的和当前的)。
- 识别忘记或配置错误的域。
如何测试
黑盒测试
第一步是枚举受害者 DNS 服务器和资源记录。有多种方法可以完成此任务,例如使用常见子域字典列表、DNS 暴力破解或使用 Web 搜索引擎和其他 OSINT 数据源进行 DNS 枚举。
使用 dig 命令,测试人员查找以下需要进一步调查的 DNS 服务器响应消息:
NXDOMAIN
SERVFAIL
REFUSED
no servers could be reached.
测试 DNS A、CNAME 记录子域接管
使用dnsrecon
以下方法对受害者的域(victim.com
) 执行基本的 DNS 枚举:
$ ./dnsrecon.py -d victim.com
[*] Performing General Enumeration of Domain: victim.com
...
[-] DNSSEC is not configured for victim.com
[*] A subdomain.victim.com 192.30.252.153
[*] CNAME subdomain1.victim.com fictioussubdomain.victim.com
...
确定哪些 DNS 资源记录已失效,并指向非活动/未使用的服务。CNAME
对记录使用 dig 命令:
$ dig CNAME fictioussubdomain.victim.com
; <<>> DiG 9.10.3-P4-Ubuntu <<>> ns victim.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 42950
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
以下 DNS 响应需要进一步调查: NXDOMAIN
.
为了测试记录 A
,测试人员执行 whois 数据库查找并将 GitHub 标识为服务提供商
$ whois 192.30.252.153 | grep "OrgName"
OrgName: GitHub, Inc.
测试人员访问 subdomain.victim.com
或发出 HTTP GET 请求,该请求返回“404 - 找不到文件”响应,这清楚地表明存在漏洞。
Figure 4.2.10-1: GitHub 404 File Not Found response
测试人员使用 GitHub 页面声明域:
Figure 4.2.10-2: GitHub claim domain
测试 NS 记录子域接管
标识范围内域的所有名称服务器:
$ dig ns victim.com +short
ns1.victim.com
nameserver.expireddomain.com
在这个虚构的示例中,测试人员通过域注册商搜索检查域 expireddomain.com
是否处于活动状态。如果该域可供购买,则子域易受攻击。
以下 DNS 响应需要进一步调查: SERVFAIL
或REFUSED
。
灰盒测试
测试人员具有可用的 DNS 区域文件,这意味着不需要 DNS 枚举。测试方法是相同的。
修复
为了降低子域接管的风险,应从 DNS 区域中删除易受攻击的 DNS 资源记录。建议将持续监控和定期检查作为最佳实践。
工具
- dig - 手册页
- 侦察 - 网络侦察框架
- theHarvester - - OSINT 情报收集工具
- Sublist3r -OSINT 子域枚举工具
- dnsrecon - DNS 枚举脚本
- OWASP 收集 DNS 枚举
- OWASP 域保护
引用
- HackerOne - A Guide To Subdomain Takeovers 黑客一 - 子域接管指南
- Subdomain Takeover: Basics 子域接管:基础知识
- Subdomain Takeover: Going beyond CNAME 子域接管:超越CNAME的范围
- can-i-take-over-xyz - A list of vulnerable services can-i-take-over-xyz - 易受攻击的服务列表
- OWASP AppSec Europe 2017 - Frans Rosén: DNS hijacking using cloud providers – no verification needed OWASP AppSec Europe 2017 - Frans Rosén:使用云提供商进行DNS劫持 - 无需验证