闪游浏览器漏洞挖掘

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.jpg

从图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.jpg

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.jpg

看来是被干扰了,咱们把<iframe src="http://www.shellcodes.org"></iframe>换一个形式,改为"><iframe src="http://www.shellcodes.org"></iframe>,保存后,将起始页恢复到默认,再次添加,效果出来了,已经成功嵌入一个外部链接了,如图4:

4.jpg

刚才我们讲了获得LOGO图片的方法,我们将<body></body>之间插入<img src="logo.jpg"><script>alert("shellcodes.org")</script></img>,让浏览器将代码<script>alert("shellcodes.org")</script>显示出来,添加后,立即弹出了提示框,如图5:

5.jpg

不过<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。希望能通过本文开拓读者挖掘漏洞的视野,而对软件漏洞的概念不仅仅是停留在缓存溢出漏洞上。