主页 > 网络知识 > 用Chrome浏览器工具发现Gmail中的DOM XSS

用Chrome浏览器工具发现Gmail中的DOM XSS

 

用Chrome浏览器工具发现Gmail中的DOM XSS

 

本文讲述了作者用Chrome浏览器开发工具DevTool,在Gmail的跨域通信中发现了隐蔽的DOM XSS漏洞,最终收获了谷歌$5000的奖励。

Gmail中的隐蔽消息

去年底,我在Gmail中研究起了DOM XSS漏洞,我并没用url参数或邮件本身来构造攻击面,而是把关注点放到了其中那些细微但却频繁使用到的postMessage api接口之上。初看起来,Gmail的收件箱像是一个简单网页,但是如果细细分析,你会发现,其背后是由多个不同框架(iframes)或网页进行相互通信的支撑。如下:

 

用Chrome浏览器工具发现Gmail中的DOM XSS

 

首先,我去寻找跨域通信(cross-frames),在Chrome的开发套件DevTools中并没有直接分析跨域通信的原生功能,这里,我们可以用这个简单的插件 - postMessage logger,它可以记录下当前的跨域通信情况。如下当Gmail收件箱加载后,Chrome开发套件就可以显示出大量不同域下的各个框架间的通信,它们负责来回传递消息。

 

用Chrome浏览器工具发现Gmail中的DOM XSS

 

上述每一个消息都有以下属性:

一个接收目标(即接收消息的框架frame)

一个消息发送源(发送消息的框架frame)

一个域(origin,消息源所在的域地址)

数据(一个字符串或一个JSON实体,或其它交互内容)

消息可在不同的框架frame间被传递,如果消息发送源对接收目标有指定的话,甚至可用window.opener、window.open() 和 window.frames方法,实现在不同域(Domain)或不同标签(Tab)下的框架进行消息传递。

接收目标用以下方法接收消息,就像上述插件postMessage logger中那样:

addEventListener("message", function(message){/* handle message here */})

如果消息过多,可以在插件postMessage logger中定制化过滤不同属性。在这些众多消息中,我发现了一个特别的消息,它在数据段中包含了一个url参数:

 

用Chrome浏览器工具发现Gmail中的DOM XSS

 

该消息由域名“hangouts.google.com”发送至“mail.google.com”,其不仅在消息数据段中包含参数url,而且该url参数中还包含了“frame”的字眼,哦,看来有点意思。

运用Chrome浏览器开发者工具

用Chrome浏览器的开发者工具,在其Network的网络活动标签下,通过点击Document文档类请求的”Doc”过滤标签,以此过滤出那些顶层窗口或带有src属性的iframes,在这里我找到了上述提到的那条特别的消息。如下:

 

用Chrome浏览器工具发现Gmail中的DOM XSS

 

可以肯定该消息的请求referrer属性为“mail.google.com” ,这就太好了,因为“mail.google.com”同时也是消息的接收目标。上图红圈中的为请求发起者“initiator”,其中的JS代码负责加载调用到的iframe,可以点击“initiator”就能打开相应的JS代码,在该代码段中,通过设置和跟踪断点,就能发现加载上述消息请求的具体代码位置,如下:

 

用Chrome浏览器工具发现Gmail中的DOM XSS

 

如上图所示,appendChild()方法负责加载上述请求消息。从该可读代码中我们可以清楚地看到其调用机制,从调试器中可以看到其消息中包含了一个src参数设置为url的iframe框架。如果点击Chrome浏览器工具右边部分的Call Stack区域,就能看到整个消息的运行机制和逻辑。

例如,以下描述是frame的消息接收机制:

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!