挖洞经验 | 用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.comhangouts.google.com)之间通过postMessage进行通信。
攻击面分析

  • 未检查postMessageorigin,可能导致恶意消息被执行。
  • 消息中包含可控的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"
  }
}

可能的攻击方式

  • 修改urljavascript:alert(1),尝试XSS。
  • 但由于CSP(内容安全策略),现代浏览器(Chrome/Firefox)会阻止执行。

2.4 绕过CSP的限制

  • IE11和Edge不受CSP限制,可以执行javascript:协议。
  • 攻击者可构造恶意页面,通过window.open()打开Gmail,并发送恶意postMessage

3. 漏洞利用步骤

3.1 定位关键postMessage

  1. 使用postMessage logger插件,过滤mail.google.com接收的消息。
  2. 找到hangouts.google.com发送的含url参数的消息。

3.2 调试iframe加载过程

  1. 在Chrome DevTools的 Network 面板,过滤Doc类型请求。
  2. 找到iframe加载的请求,检查Referer是否为mail.google.com
  3. 点击 Initiator 查看调用栈,定位appendChild()加载iframe的代码。

3.3 构造Payload

  1. 篡改postMessageurl参数:
    window.postMessage({
      url: "javascript:alert(document.domain)"
    }, "*");
    
  2. 在IE11/Edge中测试,观察是否弹窗。

3.4 绕过随机频道名称(Channel Name)

  • Gmail的postMessage通信使用6位随机数作为频道名称(channelName)。
  • 攻击者可通过以下方式获取:
    • 跨域共享Math.random()状态(类似2012年Facebook漏洞)。
    • 网络抓包拦截channelName(如果targetOrigin*)。

4. 漏洞修复方案

谷歌的修复方式:

  1. 检查postMessageorigin,确保仅接受可信来源。
  2. url参数进行安全过滤,防止javascript:协议注入。

5. 总结与经验

  1. postMessage是常见的XSS攻击面,需严格检查origindata
  2. Chrome DevTools + postMessage logger是高效的分析工具
  3. CSP不能完全阻止XSS,需结合其他防护措施。
  4. 随机数(如channelName)可能被预测或泄露,需使用更安全的机制(如加密Token)。

6. 参考工具

  1. postMessage logger(Chrome插件)
  2. Chrome DevTools(Network + Sources面板)
  3. Burp Suite / Wireshark(抓包分析channelName

:本漏洞已修复,仅供学习研究,请勿用于非法用途。

利用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 参数,其值可能被篡改: 可能的攻击方式 : 修改 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 参数: 在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 ) 注 :本漏洞已修复,仅供学习研究,请勿用于非法用途。