HackerOne漏洞案例 | 子域名劫持漏洞的挖掘指南
字数 1581 2025-08-18 11:37:37

子域名劫持漏洞挖掘与利用全面指南

1. 子域名劫持漏洞概述

子域名劫持(Subdomain Takeover)是指由于错误配置导致子域名指向未使用的第三方服务,攻击者通过在该服务注册账户声明对该子域的控制权,从而接管子域名并部署恶意内容。

1.1 基本攻击原理

  1. 目标网站存在子域名(如subdomain.example.com)
  2. 该子域名DNS记录指向第三方服务(如GitHub Pages)
  3. 该子域名在第三方服务上未被注册使用
  4. 攻击者可在第三方服务注册该子域名并控制其内容

1.2 二阶子域名劫持

  • 目标网站网页中引用了第三方资源(如JS文件)
  • 该第三方资源所在子域名可被劫持
  • 通过修改被劫持子域名上的资源内容,间接影响目标网站

2. 子域名发现技术

2.1 检索(Scraping)技术

被动侦测方式,利用外部服务收集子域名:

  • DNS Dumpster
  • VirusTotal
  • 目标网站GIT库
  • 内容安全策略头
  • 网站源代码
  • 漏洞跟踪消息

工具推荐:

  • Sublist3r:从搜索引擎、SSL证书和DNS记录网站收集子域名
git clone https://github.com/aboul3la/Sublist3r.git
cd Sublist3r
sudo pip install -r requirements.txt

2.2 暴力猜解(Brute Forcing)

使用字典进行迭代请求尝试:

  • 注意泛域名(Wildcard)模式可能导致误报
  • 检查不存在的子域名响应判断是否开启泛域名
  • 创建个性化字典(如包含jira、git等常见子域名)
host randomifje8z193hf8jafvh7g4q79gh274.example.com

2.3 指纹识别(Fingerprinting)

通过创建目标网站的通用字典来发现特殊子域名。

3. 常用子域名发现工具

3.1 Altdns

递归暴力猜解工具:

  1. 创建存在的子域名字典(subdomains.txt)
  2. 创建递归置换字典(words.txt)
  3. 运行工具生成结果
./altdns.py -i subdomains.txt -o data_output -w words.txt -r -s results_output.txt

3.2 Commonspeak

利用Google BigQuery查询记录生成每日更新的子域名字典。

3.3 SubFinder

兼具检索和暴力猜解功能,支持多种API接口。

3.4 Massdns

高速子域名枚举工具,需指定有效DNS解析器。

./scripts/subbrute.py lists/names.txt example.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt

4. 自动化流程

4.1 过滤有效子域名

while read subdomain; do
  if host "$subdomain" > /dev/null; then
    echo "$subdomain" >> live.txt
  fi
done < subdomain-list.txt

4.2 子域名截图

使用EyeWitness工具:

./EyeWitness -f live.txt -d out --headless

4.3 存储响应内容

使用meg工具:

meg -d 10 -c 200 / live.txt

4.4 特殊情况处理

  • 注意dead DNS records可能仍存在漏洞
  • 使用dig命令而非host命令检查更准确

5. 漏洞利用技术

5.1 Cookie窃取

  • 控制子域名后部署web服务
  • 设置恶意cookie
  • 利用Session Fixation漏洞劫持会话

5.2 CORS跨域资源共享

  • 检查CORS头信息
  • 确认子域名是否在白名单中
  • 利用跨域请求窃取认证数据

5.3 Oauth授权白名单

  • 劫持列入白名单的子域名
  • 重定向用户会话窃取Oauth授权信息

5.4 绕过内容安全策略(CSP)

  • 确认可劫持子域名是否在CSP白名单中
  • 绕过CSP限制执行恶意客户端代码

5.5 点击劫持(ClickJacking)

  • 检查X-Frame-Options标头中的ALLOW-FROM uri
  • 利用列入白名单的子域名构建欺骗页面

5.6 密码管理器泄露

  • 利用密码管理器在子域名上的自动填充功能
  • 获取明文密码信息

5.7 拦截电子邮件

  • 劫持邮件服务相关子域名(如SendGrid)
  • 拦截目标组织的内部邮件通信

6. 漏洞上报注意事项

  1. 在被劫持子域名上部署简单内容(如一句话标志)
  2. 在HTML注释中包含隐秘消息作为证明
  3. 仅在获得授权后进行深入测试
  4. 详细描述漏洞利用步骤
  5. 子域名劫持通常被视为高危漏洞

7. 防御建议

  1. 定期检查并清理不再使用的子域名记录
  2. 监控DNS记录变更
  3. 及时注销不再使用的第三方服务账户
  4. 实施严格的CSP策略
  5. 限制Oauth和CORS的白名单范围

通过系统性地应用这些技术和方法,安全研究人员可以有效地发现和利用子域名劫持漏洞,帮助组织提高其Web资产的安全性。

子域名劫持漏洞挖掘与利用全面指南 1. 子域名劫持漏洞概述 子域名劫持(Subdomain Takeover)是指由于错误配置导致子域名指向未使用的第三方服务,攻击者通过在该服务注册账户声明对该子域的控制权,从而接管子域名并部署恶意内容。 1.1 基本攻击原理 目标网站存在子域名(如subdomain.example.com) 该子域名DNS记录指向第三方服务(如GitHub Pages) 该子域名在第三方服务上未被注册使用 攻击者可在第三方服务注册该子域名并控制其内容 1.2 二阶子域名劫持 目标网站网页中引用了第三方资源(如JS文件) 该第三方资源所在子域名可被劫持 通过修改被劫持子域名上的资源内容,间接影响目标网站 2. 子域名发现技术 2.1 检索(Scraping)技术 被动侦测方式,利用外部服务收集子域名: DNS Dumpster VirusTotal 目标网站GIT库 内容安全策略头 网站源代码 漏洞跟踪消息 工具推荐: Sublist3r:从搜索引擎、SSL证书和DNS记录网站收集子域名 2.2 暴力猜解(Brute Forcing) 使用字典进行迭代请求尝试: 注意泛域名(Wildcard)模式可能导致误报 检查不存在的子域名响应判断是否开启泛域名 创建个性化字典(如包含jira、git等常见子域名) 2.3 指纹识别(Fingerprinting) 通过创建目标网站的通用字典来发现特殊子域名。 3. 常用子域名发现工具 3.1 Altdns 递归暴力猜解工具: 创建存在的子域名字典(subdomains.txt) 创建递归置换字典(words.txt) 运行工具生成结果 3.2 Commonspeak 利用Google BigQuery查询记录生成每日更新的子域名字典。 3.3 SubFinder 兼具检索和暴力猜解功能,支持多种API接口。 3.4 Massdns 高速子域名枚举工具,需指定有效DNS解析器。 4. 自动化流程 4.1 过滤有效子域名 4.2 子域名截图 使用EyeWitness工具: 4.3 存储响应内容 使用meg工具: 4.4 特殊情况处理 注意dead DNS records可能仍存在漏洞 使用dig命令而非host命令检查更准确 5. 漏洞利用技术 5.1 Cookie窃取 控制子域名后部署web服务 设置恶意cookie 利用Session Fixation漏洞劫持会话 5.2 CORS跨域资源共享 检查CORS头信息 确认子域名是否在白名单中 利用跨域请求窃取认证数据 5.3 Oauth授权白名单 劫持列入白名单的子域名 重定向用户会话窃取Oauth授权信息 5.4 绕过内容安全策略(CSP) 确认可劫持子域名是否在CSP白名单中 绕过CSP限制执行恶意客户端代码 5.5 点击劫持(ClickJacking) 检查X-Frame-Options标头中的ALLOW-FROM uri 利用列入白名单的子域名构建欺骗页面 5.6 密码管理器泄露 利用密码管理器在子域名上的自动填充功能 获取明文密码信息 5.7 拦截电子邮件 劫持邮件服务相关子域名(如SendGrid) 拦截目标组织的内部邮件通信 6. 漏洞上报注意事项 在被劫持子域名上部署简单内容(如一句话标志) 在HTML注释中包含隐秘消息作为证明 仅在获得授权后进行深入测试 详细描述漏洞利用步骤 子域名劫持通常被视为高危漏洞 7. 防御建议 定期检查并清理不再使用的子域名记录 监控DNS记录变更 及时注销不再使用的第三方服务账户 实施严格的CSP策略 限制Oauth和CORS的白名单范围 通过系统性地应用这些技术和方法,安全研究人员可以有效地发现和利用子域名劫持漏洞,帮助组织提高其Web资产的安全性。