挖洞经验 | 看我如何发现影响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工作流程

  1. 用户请求访问SP的服务
  2. SP将用户重定向到IdP进行认证
  3. IdP验证用户身份后生成SAML断言
  4. IdP将断言发送回SP的断言消费URL(SAML consume URL)
  5. SP基于断言决定是否授权访问

2. 信息收集阶段

2.1 子域名枚举

使用工具如aquatone进行子域名发现和截图:

aquatone -d uberinternal.com

2.2 观察认证流程

  • 注意认证跳转模式:uberinternal.comuber.onelogin.com
  • 记录SAML请求参数,特别是SAMLRequest参数

2.3 SAML请求解码

使用在线工具如samltool.com的SAML Decoder功能解码base64编码的SAMLRequest参数,提取关键信息:

  • 断言消费URL(SAML consume URL)
  • 其他SAML相关参数

3. 漏洞挖掘技术

3.1 SAML消费URL分析

  1. 从SAMLRequest中提取消费URL
  2. 检查URL路径是否存在其他端点
  3. 测试URL参数的可控性

3.2 目录暴力枚举

使用dirsearch等工具枚举已知路径:

./dirsearch.py -u https://target.com/oidauth/ -e json

重点关注:

  • /logout端点
  • /prompt端点
  • 其他认证相关端点

3.3 XSS漏洞测试

  1. 发现重定向端点(如/prompt)
  2. 测试参数注入(如base参数)
  3. 尝试经典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 结合点击劫持

  1. 构建恶意页面将目标站点iframe化
  2. 设置透明层诱导用户点击
  3. 结合XSS执行更复杂的攻击

4.3 横向渗透

利用一个子域名的XSS攻击其他关联系统,扩大攻击范围

5. 防御建议

5.1 对开发人员

  • 严格验证所有重定向URL
  • 实现Content Security Policy(CSP)
  • 对用户输入进行严格过滤和编码

5.2 对安全团队

  • 定期审计所有认证端点
  • 监控异常的重定向行为
  • 实施自动化安全测试

5.3 SAML特定防护

  • 验证SAML断言的签名
  • 限制断言消费URL的白名单
  • 实现SAML消息的完整性检查

6. 工具推荐

  1. SAML解码:

    • samltool.com
    • BurpSuite SAML插件
  2. 子域名枚举:

    • aquatone
    • Sublist3r
  3. 目录爆破:

    • dirsearch
    • Gobuster
  4. 自动化测试:

    • 自定义Python脚本
    • Selenium自动化

通过本教学文档,您应该能够理解SAML认证流程中的安全隐患,掌握如何发现和利用这类XSS漏洞,并采取适当的防御措施。

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 进行子域名发现和截图: 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 等工具枚举已知路径: 重点关注: /logout 端点 /prompt 端点 其他认证相关端点 3.3 XSS漏洞测试 发现重定向端点(如 /prompt ) 测试参数注入(如 base 参数) 尝试经典XSS payload: 3.4 批量检测技术 编写自动化脚本批量检测多个子域名的相同漏洞: 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漏洞,并采取适当的防御措施。