HackerOne漏洞案例 | 子域名劫持漏洞的挖掘指南
字数 1581 2025-08-18 11:37:37
子域名劫持漏洞挖掘与利用全面指南
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记录网站收集子域名
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
递归暴力猜解工具:
- 创建存在的子域名字典(subdomains.txt)
- 创建递归置换字典(words.txt)
- 运行工具生成结果
./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. 漏洞上报注意事项
- 在被劫持子域名上部署简单内容(如一句话标志)
- 在HTML注释中包含隐秘消息作为证明
- 仅在获得授权后进行深入测试
- 详细描述漏洞利用步骤
- 子域名劫持通常被视为高危漏洞
7. 防御建议
- 定期检查并清理不再使用的子域名记录
- 监控DNS记录变更
- 及时注销不再使用的第三方服务账户
- 实施严格的CSP策略
- 限制Oauth和CORS的白名单范围
通过系统性地应用这些技术和方法,安全研究人员可以有效地发现和利用子域名劫持漏洞,帮助组织提高其Web资产的安全性。