挖洞经验 | 用Chrome浏览器工具发现Gmail中的DOM XSS
字数 1879 2025-08-15 21:30:59
利用Chrome开发者工具发现Gmail DOM XSS漏洞的详细教学
1. 漏洞概述
本案例研究的是Gmail中的一个DOM-based XSS漏洞,该漏洞源于Gmail的跨域通信(postMessage)机制未对消息来源进行严格验证,导致攻击者可以在特定条件下执行任意JavaScript代码。漏洞最终被谷歌安全团队确认并奖励$5000。
2. 漏洞发现的关键点
2.1 关注点:Gmail的跨域通信(postMessage)
Gmail的界面由多个iframe组成,不同域(如mail.google.com和hangouts.google.com)之间通过postMessage进行通信。
攻击面分析:
- 未检查
postMessage的origin,可能导致恶意消息被执行。 - 消息中包含可控的
url参数,可能被篡改为javascript:协议。
2.2 使用Chrome DevTools分析postMessage
由于Chrome DevTools没有原生支持postMessage日志记录,可以使用插件 postMessage logger 来捕获跨域通信数据。
每条postMessage消息包含:
- 接收目标(frame):接收消息的
iframe。 - 消息发送源(frame):发送消息的
iframe。 - 域(origin):消息来源的域名。
- 数据(data):可以是字符串、JSON对象等。
2.3 关键发现:含url参数的postMessage
在hangouts.google.com发送给mail.google.com的消息中,发现data包含一个url参数,其值可能被篡改:
{
"target": "mail.google.com",
"source": "hangouts.google.com",
"origin": "https://hangouts.google.com",
"data": {
"url": "https://example.com/some-frame.html"
}
}
可能的攻击方式:
- 修改
url为javascript:alert(1),尝试XSS。 - 但由于CSP(内容安全策略),现代浏览器(Chrome/Firefox)会阻止执行。
2.4 绕过CSP的限制
- IE11和Edge不受CSP限制,可以执行
javascript:协议。 - 攻击者可构造恶意页面,通过
window.open()打开Gmail,并发送恶意postMessage。
3. 漏洞利用步骤
3.1 定位关键postMessage
- 使用
postMessage logger插件,过滤mail.google.com接收的消息。 - 找到
hangouts.google.com发送的含url参数的消息。
3.2 调试iframe加载过程
- 在Chrome DevTools的 Network 面板,过滤
Doc类型请求。 - 找到
iframe加载的请求,检查Referer是否为mail.google.com。 - 点击 Initiator 查看调用栈,定位
appendChild()加载iframe的代码。
3.3 构造Payload
- 篡改
postMessage的url参数:window.postMessage({ url: "javascript:alert(document.domain)" }, "*"); - 在IE11/Edge中测试,观察是否弹窗。
3.4 绕过随机频道名称(Channel Name)
- Gmail的
postMessage通信使用6位随机数作为频道名称(channelName)。 - 攻击者可通过以下方式获取:
- 跨域共享
Math.random()状态(类似2012年Facebook漏洞)。 - 网络抓包拦截
channelName(如果targetOrigin为*)。
- 跨域共享
4. 漏洞修复方案
谷歌的修复方式:
- 检查
postMessage的origin,确保仅接受可信来源。 - 对
url参数进行安全过滤,防止javascript:协议注入。
5. 总结与经验
postMessage是常见的XSS攻击面,需严格检查origin和data。- Chrome DevTools +
postMessage logger是高效的分析工具。 - CSP不能完全阻止XSS,需结合其他防护措施。
- 随机数(如
channelName)可能被预测或泄露,需使用更安全的机制(如加密Token)。
6. 参考工具
- postMessage logger(Chrome插件)
- Chrome DevTools(Network + Sources面板)
- Burp Suite / Wireshark(抓包分析
channelName)
注:本漏洞已修复,仅供学习研究,请勿用于非法用途。