闪游浏览器漏洞挖掘
Table of Contents
本文已发于《黑客X档案》2011.2、3月合刊
1. 前言
浏览器是用户与WEB服务器交换信息的桥梁,如今市面上有许多的厂商推出了他们自己的浏览器,我们大概将浏览器分为三种:基于 IE 内核的、非 IE 内核和双核浏览器。基于 IE 内核的浏览器是使用了 IE 原本的内核功能,但独立开发出提供其他第三方面功能的浏览器,这类浏览器有:360浏览器、腾讯 TT 等等,数量之庞大;非IE内核的浏览器就顾名思义了,典型代表有火狐、Google Chrome,它们的内核都不属于IE;而双核浏览器拥有 WebKit 模式(一种开源的浏览器内核)和兼容 IE 的模式,典型代表是搜狗浏览器,也正是它开创了双核浏览器时代,而360也推出了双核无缝的浏览器,该浏览器可以在 http://chrome.360.cn 下载。
对于基于 IE 的浏览器,它们在显示网页上是使用了 IE 的内核,而且独立开发了其他的功能,比如广告过滤、多个标签页、隐私保护等等功能,基本上是不满 IE 浏览器原本功能而单独整容出的新品种浏览器。
如此多的浏览器让咱们眼花缭乱,于是便邪恶,于是便挖漏洞。
2. 浏览器漏洞概述
上节咱们区分了三种浏览器架构——基于 IE 内核、非 IE 内核和双核浏览器,对于这三种类型的浏览器,挖掘漏洞方法也有所不同。
对于非 IE 内核和双核的浏览器,我们可以深度挖掘内核功能上的缺陷,比如对某个 HTML 标签造成的溢出漏洞等等。常用方法是 Fuzzing。
对于 IE 内核的浏览器,则就不用再对内核功能进行挖掘,因为这些缺陷属于 IE 上的,而并非特定一款浏览器的内核问题。对于这样的浏览器,可以对该浏览器提供的第三面功能上进行漏洞挖掘。本文之后以闪游浏览器为例开始讲解。
3. 闪游浏览器的漏洞挖掘
闪游浏览器,是青岛软媒网络科技有限公司开发的一款基于 IE 内核的浏览器,界面清爽,采用了 Win7 的窗口效果;支持多标签;支持广告过滤;文件小;浏览速度快等等功能。
目前官方最新版式1.5版,昨晚在该版本下找到一个漏洞,可执行任意 HTML 代码,危害不大,但是我们的目的不是利用漏洞做违法的事,而是开阔眼界,探索各种漏洞的挖掘方法,对于漏洞挖掘,不要只停留在缓冲区溢出漏洞的挖掘,一个软件有不同的功能和不同的设计方法,不同功能的缺陷会造成不同的漏洞。
我们安装好闪游浏览器以后,将该浏览器的主页设置为空白页。然后重新打开浏览器,可看见一个“起始页”(不设置空白主页时,在关闭全部的网页后也可以显示出起始页),如图1:
图1
从图1中我们看到什么,是网页收藏,这也是他们扩充的第三面功能之一,为方便用户进入常用的网站。
为了显示效果更炫,他们设计时采用了图1这种方式显示,其显示内容包括收藏网站的 logo、网站的标题,而最主要的是,这个页面是以 HTML 方式显示的,即一个网页文件。那么倘若这里没有过滤任何 HTML 标签,会不会造成显示出现可执行任意的 HTML 标签呢?下面来看看这个页面的实现原理。
4. 技术原理
要达到图1中显示 logo 和网站标题的作用,必须获得对应网站的标题和 logo。我们知道一个网页页面由 HTML 语言构成,不同的 HTML 标签代表了不同的含义,比如 <title> 代表了网页的标题、<img> 代表显示一张图片、<a> 代表一个超链接等等。
闪游浏览器的起始页获得这些信息的方法很简单,添加一个欲收藏的网站时,浏览器自动去搜索该网站的 <tilte> 标签内的内容,将其显示在起始页上。
但是一个网页中会有许多的图片,浏览器是怎么知道哪张图片是该网站的 logo 的呢?经过一番研究,原来它是去搜索网页中所有 <img> 中的 src 属性,如果地址里包含了“logo”字样,就判定该图片为该网站的 logo,为了证实,我在本地 IIS 网站目录里放了一张图片,命名为 logo.jpg,然后建立了一个 HTML 文件,文件内容如下:
<html> <head> <title>test</title> </head> <body> <img src="logo.jpg"></img> </body> </html>
这个 HTML 代码意思是显示本地一张名为 logo.jpg 图片,然后访问..//127.0.0.1,可见网页中出现一张图片。
然后再在起始页中点击“添加新的网页”,输入地址..//127.0.0.1并确定。等待数秒钟后,就可以在预览处看到刚才的 logo.jpg 了,图2中的抽象派的叉叉便是我刚才放的 logo.jpg:
图2
5. 触发漏洞
不知道大家看出问题来了么,刚才讲的原理,闪游浏览器无非就是将 <title></title> 之间的内容显示出来。而问题所在是,它并不知道 <title></title> 之间的内容是否也是一段 HTML 代码,就胡乱显示出来了,从而导致可以随意执行 HTML 代码。下面我将刚才的 HTML 文件修改一下来证实一点。代码如下:
<html> <head> <title> <iframe src="http://www.shellcodes.org"></iframe></title> </head> <body> </body> </html>
在 <title></title> 之间,我插入了一个 <iframe src="http://www.shellcodes.org"></iframe>,喜欢挂马的同学都应该明白这个是嵌入一个外部网站,保存后,我们再将它添加到起始页内,却出现图3这样:
图3
看来是被干扰了,咱们把 <iframe src="http://www.shellcodes.org"></iframe> 换一个形式,改为 "><iframe src="http://www.shellcodes.org"></iframe>,保存后,将起始页恢复到默认,再次添加,效果出来了,已经成功嵌入一个外部链接了,如图4:
图4
刚才我们讲了获得 logo 图片的方法,我们将 <body></body> 之间插入 <img src="logo.jpg"><script>alert("shellcodes.org")</script></img>,让浏览器将代码 <script>alert("shellcodes.org")</script> 显示出来,添加后,立即弹出了提示框,如图5:
图5
不过 <img></img> 之间的这段脚本只有添加后的那瞬间会被执行,以后无论是再次启动浏览器,还是再次刷新起始页,这段代码都不会再执行,但它确实属于一个安全问题。
完整的测试代码如下:
<html> <head> <title> "><iframe src="http://www.shellcodes.org"></iframe></title> </head> <body> <img src="logo.jpg"><script>alert("shellcodes.org")</script></img> </body> </html>
6. 后记
该漏洞虽然危害不大,但它确确实实是一个安全漏洞。至此,我已经通知了官方了,他们已经开始做一些修补工作。影响版本 <=1.5.0.0。希望能通过本文开拓读者挖掘漏洞的视野,而对软件漏洞的概念不仅仅是停留在缓存溢出漏洞上。