中国特色浏览器的漏洞挖掘与自动化测试

这篇文章是我于2016-09-06日写的...不过之前匿名了,今天突然翻到,不过早已物是人非了,测试下2年钱的0day到现在还可以用...

  • 远程下载任意文件
  • 下载文件指定计算机任意位置
  • 本地执行任意命令

整理到这里吧:

想看原来也可以看公众号:https://mp.weixin.qq.com/s/w86MPYhn-z8jv0FcsZutHw

0x00 前言

随着web2.0的入日中天,越来越来的白帽子开始不断的挖掘XSS,但是发现去搞浏览器安全之甚少,于是在自己工作闲暇之余写了此文。这篇文章主要介绍国内的浏览器安全中存在的特色问题和一些漏洞挖掘思路。

0x01 同源策略

SOP在前端的安全的书中屡见不鲜,无论是从刺还是cos的书中你会看到”同源策略”这个概念经常被提到,有的读者可能不够细心没有去读或者理会这个思想,所以今天再次去提及这个概念:

 

同源策略(SOP):不同域客户端脚本在没有明确授权的情况下,不能读写对方的资源。

 

这里只是简单的给大家介绍一下,乌云drops中瞌睡龙也介绍了相关概念,不懂的读者可以参考下《Browser Security-同源策略、伪URL的域》

0x02 UXSS

在搞WEB安全的时候,你可能只听过反射XSS、储存XSS、DOM XSS、Flash XSS等。但是一致没听说过UXSS,UXSS是什么呢?

 

通用跨站脚本(Universal Cross-Site Scripting): UXSS主要是利用浏览器及插件的漏洞(比如同源策略绕过,导致A站的脚本可以访问B站的各种私有属性,例如cookIE等)来构造跨站条件,以执行恶意代码。它与普通的XSS的不同点就在于漏洞对象及受害范围的差异上。

例如:某浏览器上存在UXSS漏洞,用户访问攻击者的网站即可盗取baidu.com的cookie。

 特色一:

国内很多浏览器是基于chromium而二次开发的,所以一旦chromium内核出现了问题,那么将导致所有基于该内核的浏览器都出现了此问题。国外的bugs.chromium.org纰漏chromium内核出现的安全漏洞。

细心的人会看到有些漏洞是提供poc或exp的,然而对于开发者升级内核是一件很麻烦的事情,所以我们可以利用基础chrome内核的漏洞来对国内的浏览器进行测试

 

思考:对于这类的检测我们可以自动化去操作,比如我们先去chromium.org爬取包含uxss漏洞页面,然后把其中的POC和EXP改造一下,自己写一个页面,然后去调用这些poc或exp.国内腾讯安全应急响应中心(TSRC)早在14年就提出了此类的想法,乌云中瘦蛟舞在drops也提及了此类的想法,并且在github上开源了此项目。

0x03 特权域

特权域是开发者在开发过程中或者功能过程中需要调用一些其他的功能而开发的,比如去获取某个位置的相关信息,或者去下载、上传某个文件,但是这些特权往往是在某个域下才能操作的。例如:Chromium的特权域是chrome://downloads

乌云中关于浏览器安全的漏洞被爆出特权域也屡见不鲜,比如插件中存在,DLL中存在等等,如上我们有了UXSS,一切都不再是问题

利用特权域下载任意文件到任意位置

0x04 伪协议

在windows中,伪协议都是存放在\shell\open\Command当中,在伪协议当中,有一个好玩的协议叫做vbefile,他可以用来执行JS。

他可以用来干什么呢?我们知道,浏览器的默认缓存文件位置为:

\AppData\Roaming\xxxxx\Webkit\Default\Cache

并且缓存文件的命名也是有规律的:f_000000-> f_ffffff

我们就可以用vbefile来去指定去执行,例如:vbefile:/../../../eval.js,或者去执行缓存文件

他会提交这样一个错误,因为windows根据扩展名来区分,缓存文件没有扩展名所以vbefile无法去执行。

通过wscript的用法我们可以看到,//E我们可以执行引擎去执行这个缓存文件,但是具体怎么实现呢?我们需要用xss的思想来思考:

Vbefile:’/../../../../缓存目录/缓存文件”//E:jscript”’ 这样去执行就可以了

现在还遇到另外一个文件,缓存文件那么多,遍历第一个就会提交错误,用户也会发现,这样该怎么去解决,对于vbefile来说都是小意思,我们再看刚才的参数,//B 可以关掉错误提示,这样只要用户访问我们的网站,生成缓存文件,找到缓存文件执行就可以了。

 特色二:

在chrome或者firefox中,如果我们要启用伪协议的话,会进行用户交互提示:

但是很多国内的浏览器为了用户体验把这项功能去掉了,这样会造成去执行第三方的协议的时候用户没有交互的安全提示,也对攻击者来说提供了方便。

 

当然,在国产的浏览器中还是会发现存在这样的浏览器,会进行交互提示,那么怎么办呢?

 特色三:

国内大多数的浏览器包含这样一个功能:双核浏览器

双核浏览器的诞生是因为chrome对国内的一些网站的渲染不够好,所以导致了国内的浏览器厂商不得不增加了双核浏览器的功能,比如银行的支付控件,政府或教育的网站系统。访问类似相关网站,浏览器会很智能的为我们切换内核。chrome调用第三方会提示是否使用,而调用IE的内核会直接执行第三方的协议。

这样我们就可以完成执行执行如下:Webkit--->  IE

我们就可以愉快的去执行vbefile了

0x05 思考

经过刚刚的分析,我们可以看到,UXSS,特权域,伪协议,三种中的任何一种都可以造成严重的危害,笔者在测试中也发现三种组合起来可以让攻击者的攻击悄然无声。

对于国内浏览器的安全策略给出如下建议:

1. 内核很重要,安全永远是一场不停歇的对抗,落后就要挨打。

2. 针对特权域的使用要严格控制,特权域的XSS也要全面排查。

3. 对于windows的自有不需要的协议应该禁止,比如vbefile。

 

漏洞挖掘的思考:

1.POC集成,这样在测试浏览器的过程中会测试的更全面一些。

2.思路其实不仅仅针对浏览器,很多厂商的客户端也是自封装webkit,乌云中纰漏的也不在少数,跳蛋流在这方面提交了很多的漏洞。

3.思路要猥琐,要从各个方面去思考,不要以为找到一个普通的XSS弹个窗就OK了,如果某浏览器存在反射XSS,恰好特权域的权限在这个域下才能够执行。有XSS的地方就能想到嘿嘿嘿。

4.能够看这么久,非常感激,其实写这篇文章是为了送妹子中秋小兔砸来的。

0x06 浏览器安全推荐

1.和行业的人交流,看看他们发表过的技术文章或漏洞比如gainover、数据流、瘦蛟舞等等,没提到的大牛勿喷

2.多看书《白帽子讲浏览器安全》、《WEB之困》、《Webkit技术内幕》

3.多去实战,安全是一个不断对抗的过程。

 

posted @ 2017-07-29 17:15 sevck 阅读(...) 评论(...) 编辑 收藏