挖洞经验 | 看我如何发现影响20多个Uber子域名的XSS漏洞
字数 1366 2025-08-18 11:37:46
SAML身份验证与XSS漏洞挖掘实战教学
1. SAML基础概念
1.1 SAML定义
SAML(Security Assertion Markup Language)是一种基于XML的开源标准数据格式,用于在当事方之间交换身份验证和授权数据,特别是在身份提供者(IdP)和服务提供者(SP)之间。
1.2 SAML角色模型
- 委托人(Principal): 通常是终端用户
- 身份提供者(IdP): 负责验证用户身份并生成断言
- 服务提供者(SP): 依赖IdP的断言提供服务的实体
1.3 SAML工作流程
- 用户请求访问SP的服务
- SP将用户重定向到IdP进行认证
- IdP验证用户身份后生成SAML断言
- IdP将断言发送回SP的断言消费URL(SAML consume URL)
- SP基于断言决定是否授权访问
2. 信息收集阶段
2.1 子域名枚举
使用工具如aquatone进行子域名发现和截图:
aquatone -d uberinternal.com
2.2 观察认证流程
- 注意认证跳转模式:
uberinternal.com→uber.onelogin.com - 记录SAML请求参数,特别是
SAMLRequest参数
2.3 SAML请求解码
使用在线工具如samltool.com的SAML Decoder功能解码base64编码的SAMLRequest参数,提取关键信息:
- 断言消费URL(SAML consume URL)
- 其他SAML相关参数
3. 漏洞挖掘技术
3.1 SAML消费URL分析
- 从SAMLRequest中提取消费URL
- 检查URL路径是否存在其他端点
- 测试URL参数的可控性
3.2 目录暴力枚举
使用dirsearch等工具枚举已知路径:
./dirsearch.py -u https://target.com/oidauth/ -e json
重点关注:
/logout端点/prompt端点- 其他认证相关端点
3.3 XSS漏洞测试
- 发现重定向端点(如
/prompt) - 测试参数注入(如
base参数) - 尝试经典XSS payload:
javascript:alert(123);
3.4 批量检测技术
编写自动化脚本批量检测多个子域名的相同漏洞:
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
with open("subdomains.txt") as urlList:
for url in urlList:
test_url = url.strip() + "/oidauth/prompt?base=javascript:alert(123);//&return_to=..."
response = requests.get(test_url, verify=False)
if "alert(123)" in response.text:
print(f"Vulnerable: {url}")
4. 漏洞利用场景
4.1 单一XSS利用
- 窃取用户会话cookie
- 修改页面内容
- 发起恶意请求
4.2 结合点击劫持
- 构建恶意页面将目标站点iframe化
- 设置透明层诱导用户点击
- 结合XSS执行更复杂的攻击
4.3 横向渗透
利用一个子域名的XSS攻击其他关联系统,扩大攻击范围
5. 防御建议
5.1 对开发人员
- 严格验证所有重定向URL
- 实现Content Security Policy(CSP)
- 对用户输入进行严格过滤和编码
5.2 对安全团队
- 定期审计所有认证端点
- 监控异常的重定向行为
- 实施自动化安全测试
5.3 SAML特定防护
- 验证SAML断言的签名
- 限制断言消费URL的白名单
- 实现SAML消息的完整性检查
6. 工具推荐
-
SAML解码:
- samltool.com
- BurpSuite SAML插件
-
子域名枚举:
- aquatone
- Sublist3r
-
目录爆破:
- dirsearch
- Gobuster
-
自动化测试:
- 自定义Python脚本
- Selenium自动化
通过本教学文档,您应该能够理解SAML认证流程中的安全隐患,掌握如何发现和利用这类XSS漏洞,并采取适当的防御措施。