一、前言
浏览器是用户与WEB服务器交换信息的桥梁,如今市面上有许多的厂商推出了他们自己的浏览器,我们大概将浏览器分为三种:基于IE内核的、非IE内核和双核浏览器。基于IE内核的浏览器是使用了IE原本的内核功能,但独立开发出提供其他第三方面功能的浏览器,这类浏览器有:360浏览器、腾讯TT等等,数量之庞大;非IE内核的浏览器就顾名思义了,典型代表有火狐、Google Chrome,它们的内核都不属于IE;而双核浏览器拥有WebKit模式(一种开源的浏览器内核)和兼容IE的模式,典型代表是搜狗浏览器,也正是它开创了双核浏览器时代,而360也推出了双核无缝的浏览器。
对于基于IE的浏览器,它们在显示网页上是使用了IE的内核,而且独立开发了其他的功能,比如广告过滤、多个标签页、隐私保护等等功能,基本上是不满IE浏览器原本功能而单独整容出的新品种浏览器。
二、浏览器漏洞概述
上节咱们区分了三种浏览器架构——基于IE内核、非IE内核和双核浏览器,对于这三种类型的浏览器,挖掘漏洞方法也有所不同。
对于非IE内核和双核的浏览器,我们可以深度挖掘内核功能上的缺陷,比如对某个HTML标签造成的溢出漏洞等等,常用方法是Fuzzing。
对于IE内核的浏览器,则就不用再对内核功能进行挖掘,因为这些缺陷属于IE上的,而并非特定一款浏览器的内核问题。对于这样的浏览器,可以对该浏览器提供的第三面功能上进行漏洞挖掘。本文之后以闪游浏览器为例开始讲解。
三、闪游浏览器的漏洞挖掘
目前官方最新版式1.5版,昨晚在该版本下找到一个漏洞,可执行任意HTML代码,危害不大,但是我们的目的不是利用漏洞做违法的事,而是开阔眼界,探索各种漏洞的挖掘方法,对于漏洞挖掘,不要只停留在缓冲区溢出漏洞的挖掘,一个软件有不同的功能和不同的设计方法,不同功能的缺陷会造成不同的漏洞。
我们安装好闪游浏览器以后,将该浏览器的主页设置为空白页。然后重新打开浏览器,可看见一个“起始页”(不设置空白主页时,在关闭全部的网页后也可以显示出起始页)。
我们看到什么,是网页收藏,这也是他们扩充的第三面功能之一,为方便用户进入常用的网站。
为了显示效果更炫,他们设计时采用了这种方式显示,其显示内容包括收藏网站的LOGO、网站的标题,而最主要的是,这个页面是以HTML方式显示的,即一个网页文件。那么倘若这里没有过滤任何HTML标签,会不会造成显示出现可执行任意的HTML标签呢?下面来看看这个页面的实现原理。
四、技术原理
要达到显示LOGO和网站标题的作用,必须获得对应网站的标题和LOGO。我们知道一个网页页面由HTML语言构成,不同的HTML标签代表了不同的含义,比如<title>代表了网页的标题、<img>代表显示一张图片、<a>代表一个超链接等等。
闪游浏览器的起始页获得这些信息的方法很简单,添加一个欲收藏的网站时,浏览器自动去搜索该网站的<tilte>标签内的内容,将其显示在起始页上。
但是一个网页中会有许多的图片,浏览器是怎么知道哪张图片是该网站的LOGO的呢?经过一番研究,原来它是去搜索网页中所有<img>中的src属性,如果地址里包含了“logo”字样,就判定该图片为该网站的LOGO,为了证实,我在本地ns网站目录里放了一张图片,命名为logo.jpg,然后建立了一个HTML文件,文件内容如下:
这个HTML代码意思是显示本地一张名为logo.jpg图片,然后访问http://127.0.0.1,可见网页中出现一张图片。
然后再在起始页中点击“添加新的网页”,输入地址http://127.0.0.1并确定。等待数秒钟后,就可以在预览处看到刚才的logo.jpg了。
五、触发漏洞
不知道大家看出问题来了么,刚才讲的原理,闪游浏览器无非就是将<title></title>之问的内容显示出来。而问题所在是,它并不知道<title></title>之间的内容是否也是一段HTML代码,就胡乱显示出来了,从而导致可以随意执行HTML代码。我将刚才的HTML文件修改一下来证实这一点了。
在<title></titIe>之间,我插入了一个<ifrme src=></ifrme>,喜欢挂马的同学都应该明白这个是嵌入一个外部网站,保存后,我们再将它添加到起始页内,却出现了这样的效果。
刚才我们讲了获得LOGO图片的方法,我们将<bdy></body>之间插入<img sc="logo.jpg"><scit>alrt("")</scrt></img>,让浏览器将代码<scipt>alert("")</scrpt>显示出来,添加后,立即弹出了提示框。
不过<img></img>之间的这段脚本只有添加后的那瞬间会被执行,以后无论是再次启动浏览器,还是再次刷新起始页,这段代码都不会再执行,但它确实属于一个安全问题。
六、后记
该漏洞虽然危害不大,但它确确实实是一个安全漏洞。至此,我已经通知了官方了,他们已经开始做一些修补工作。影响版本<=1.5.0.0。希望能通过本文开拓读者挖掘漏洞的视野,而对软件漏洞的概念不仅仅是停留在缓存溢出漏洞上。
本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。