挖洞经验 | 看我如何在短时间内对Shopify五万多个子域名进行劫持
字数 1229 2025-08-18 11:37:42
Shopify子域名劫持漏洞分析与利用指南
一、漏洞概述
Shopify子域名劫持漏洞是一种由于DNS配置不当导致的攻击面,攻击者可以接管未正确配置的Shopify子域名。该漏洞主要存在于两种场景:
- 网页应用名称映射:当子域名指向
myshopname.myshopify.com且商店名称未被注册时 - DNS映射:当子域名指向
shops.myshopify.com时
二、漏洞检测方法
1. 识别潜在漏洞目标
检测目标网站是否存在以下两种响应页面:
- Shopify默认错误页面
- 404页面
2. 检查DNS记录类型
2.1 网页应用名称映射检测
nslookup shop.buckhacker.com
检查是否存在指向myshopname.myshopify.com的CNAME记录
2.2 DNS映射检测
检查是否存在指向shops.myshopify.com的CNAME记录
3. 商店名称可用性检查
通过Shopify注册接口验证商店名称是否可用:
POST /api/check_shop_availability.json HTTP/1.1
Host: www.shopify.com
Content-Type: application/json
{"shop":{"name":"buckhacker"}}
响应分析:
- 不可用:
{"status":"unavailable","message":null,"host":"buckhacker.myshopify.com"} - 可用:
{"status":"available","message":null,"host":"buckhacker2.myshopify.com"}
三、漏洞利用步骤
1. 网页应用名称映射劫持
- 注册可用的商店名称
- 在Shopify管理面板中:
- 进入"Online Store" → "Domains"
- 点击"Connect existing domain"
- 输入存在漏洞的域名
- 点击"Next"和"Verify Connection"
2. DNS映射劫持
- 创建可注册的商店名
- 在管理后台连接目标子域名(如sales.buckhacker.com)
四、大规模自动化检测
1. 使用FDNS数据集
zcat $FDNS_DATASET | strings | grep shopify.com | cut -d "\"" -f 8 | grep -v "shopify.com" | while read subdomain; do python3 ShopifySubdomainTakeoverCheck.py $subdomain; done
2. 检测脚本关键功能
脚本应执行三重检查:
- 错误响应页面检查
- CNAME记录检查
- REST API请求检查
五、漏洞影响范围
- 根据2017年FDNSv2数据集,约55,000个Shopify子域名存在此漏洞
- 约2%的Shopify网站存在网页应用名称映射配置错误
六、防御建议
对Shopify商家:
- 删除不再使用的CNAME记录
- 定期检查DNS配置
- 使用永久重定向而非CNAME
对平台提供商:
- 实现子域名所有权验证机制
- 监控异常域名注册行为
- 提供清晰的DNS配置文档
七、扩展应用
该方法可适用于其他域名注册提供商的检查,思路包括:
- 分析CNAME指向模式
- 检查目标平台注册接口
- 自动化验证接管可能性
附录:漏洞上报时间线
- 2018.8.21 - 通过HackerOne上报
- 2018.8.21 - Shopify初步响应
- 2018.8.23 - Shopify后续反馈
- 2018.9.10 - 漏洞公开
注:本指南仅供安全研究使用,实际操作需获得合法授权。