友评互动浏览器远程攻击漏洞
本文已发于《黑客防线》2011.4期
1. 前言
话说某日,我在网上搜索某资料,翻来覆去终于在“上学吧”这个网站找到了,不过需要给3块钱才可以下,当时想着为了资料,1元钱就1元吧。但这个网站充值金额最小是10元,结果一不留神就充了50进去,一个对我没用的网站充了50难免心疼。于是联系客服,他死活不退款。昨日,我又再次在这个网站下载了个 FTP Server 的源码,哪里知道不给提示就扣了我3元,3元买一个没太大价值的源码,觉得很心疼,之后还在这个 FTP Server 源码中发现了很多溢出漏洞,便心有余悸。经过冷静思考,我觉得这种损失应该需要我自己负责,于是再次来到他们网站,看到了“友评互动浏览器”,决定挖个 0day 换稿费来弥补下这些损失。
2. 漏洞分析
友评浏览器是希赛公司开发的一款互动性比较强的浏览器,可以边浏览网页边与其他浏览相同页面的友评浏览器用户进行互动聊天。目前官方提供的最新版本是2011测试版(1.0.7),如图1:
在安装友评浏览器成功后,运行浏览器,界面如图2:
友评浏览器是基于 IE 内核的浏览器,所以,不用对浏览器内核进行测试,直接从它提供的第三方面功能入手。我们从图2可以看到,运行浏览器后,界面默认分为左右两栏,位于浏览器右边是正常的网页浏览;而位于左边的正是互动评论,也正是该款浏览器功能的亮点,这个功能是这样的:用友评浏览器浏览任意一个页面,在左边互动评论中可以与其他浏览相同页面的用户进行互动交流。
我们仔细看一看互动的评论显示,在这里显示了一些用户的基本信息:用户名、头像,以及联系方式的链接。很明显所有评论是以 HTML 方式显示的。只要在这里能执行我们构造的任意 HTML 代码,就可以威胁到与我们浏览相通页面的用户。
初步打算将用户名改成 HTML 代码,然后提交评论,看提交的代码是否会被执行。为了证明,我们点击浏览器右下角那一排按钮的第一个![)按钮,然后弹出“友评聊聊”的登录界面,登录后,点击“友评聊聊”上的头像按钮,弹出“友评聊聊选项”。在“个人设置”里可以设置用户名,这里我先填入 <script>alert(“test”)</script> 并确定资料的修改。
修改资料之后来到浏览器,在左下角评论框中输入任意字符串,并提交。出现“评论失败,请检查网络设置!”的提示,如图3:
起初我还真以为是网络问题呢,折腾了半天,结果发现时因为用户名里有非法字符。于是去网上找了个 Escape 加密工具把 <script>alert(“test”)</script> 转换成了字符串 %3Cscript%3Ealert%28%u201Ctest%u201D%29%3C/script%3E,然后填入用户名中,发现用户名输入框限制了用户名输入的长度。玩漏洞的朋友应该时常会感觉到一个字符串有多么重要。于是省略后,将 <script>alert(‘a’)</script> 加密后输入到用户名框里,这下才输入完整了。
重新提交任意字符串的评论后,发现显示的评论样式有问题了,很明显是我们的 HTML 代码干扰的。不过,后来我怎么用 <script> 来调用 JS 代码,或者引用外部 JS 代码,都无法正常执行,要么会干扰评论的显示,要么会太长从而无法完整输入。然后就考虑是不是在显示时过滤了部分敏感的 HTML 代码。
我将 <img src=""> 加密成 %3Cimg%20src%3D%22http%3A//shellcodes.org/2.jpg%22%3E,然后输入到用户名框内,不过有两个字符没有输入成功,因为超过长度了,不过没关系。然后提交任意评论,可以看到刚才的代码成功执行了,如图4,图中黑色大块,就是一张图片:
既然 HTML 能成功执行,后来我绞尽脑汁想去执行JS代码,一直都不行。翻 HTML 相关手册时,突然发现我竟然忘记 <iframe 标签了,看来思想狭隘了,这是挂马者最爱用的,于是我将 <iframe src=http://baidu.com> 加密成 %3Ciframe%20src%3D%22http%3A//baidu.com%22%3E 后输入到用户名框,然后提交评论,代码执行成功,如图5:
都可以用 <iframe 了,能做的事太多了。
3. 后记
友评互动浏览器在浏览网页时,都可以看到大家在旁边进行互动交流,那么,突然执行一个带恶意代码的 HTML 时,相信可以威胁到许多用户的安全。
挖掘漏洞和利用漏洞时,思想不能太狭隘。特别是不要只在缓存溢出上下手,更不要总是想着找一个远程溢出漏洞,有时其他漏洞也会有很强的杀伤力,比如友评浏览器这次的漏洞,精心利用,足矣完成远程攻击。
截止此时,我已经及时联系了官方,在与他们的配合下,友评浏览器团队以最快的速度修补了该次出现的漏洞,这也是我见过修补漏洞最积极也最快速更是最谦逊的团队。