赶集网 木马也去赶集
安全阵线
本期主角 赶集网
问题所在 search_keyword过滤不严
主要危害 进行挂马攻击
调研时间 2009.7.30~2009.7.31
漏洞状况 已通知修复
上周四,小编收到一封信,说他们网站的程序员在看我们文章之前,还不知道要对网站程序的关键字进行过滤,可见我们的责任重大。本周,小编给大家介绍的是赶集网(www.ganji.com)的挂马漏洞。
赶集网是一个网络资讯平台,上面有大量租房、买卖二手物品、交友等信息。该网站在Alexa中排第890位,流量较大(图1)。该网站对敏感的关键字做了一些处理,但比较初级,面也不够广,防君子可以防小人就难了。

我是【N.N.U】的成员,第一次跟《电脑报》的读者朋友聊天,感到比较荣幸。闲话我就不多说了(怕挨砖头^_^),我给大家带来的是赶集网的挂马漏洞,我独自发现的哟,本来就我一个人知道,现在大家都知道了。
我是碰巧发现漏洞的,都忘了是怎么进入该网站的,反正是看到该网站称自己是“谷歌的战略合作伙伴”,于是出于强烈的“正义感”(天上下砖头了),我研究了该网站,发现了安全问题。由于该网站对用户提交的搜索关键字过滤不严,导致了跨站脚本漏洞的存在。黑客可以构造特殊的脚本代码直接将挂马代码写入网页中,用户只要点击链接就会触发网页木马。
search_keyword参数过滤不严
赶集网的http://bj.ganji.com页面,提供了分类信息的搜索功能,直接输入需要搜索的关键字即可进行搜索,例如我们随便输入“testtest”,点击“搜索”按钮后,很快可以得到搜索结果。
搜索结果页面的地址是http://bj.ganji.com/site/s/_testtest, 我们可以发现链接最后的_,后面跟着的就是我们的关键字,我们将testtest关键字改为“><script>alert(1)</script>”回车,页面弹出了一个对话框(图2),证明赶集网确实存在跨站漏洞。

安全小百科:跨站漏洞就如同一个商场中没有保安和管理人员一样,在这样一个缺乏有效监管和审查的商场中,自然会有冒充商场人员的骗子混进来摆摊设点,而消费者则会将这些骗子误认为是商场的员工,被这些骗子骗了也会认为是被商场骗了,会将怒气发泄到商场身上。
赶集网漏洞如此利用
第一步:制作网页木马
要在赶集网上挂马,先要准备好网页木马。生成网页木马的工具有很多,不同黑客的选择有所不同。这里我选择《突破XP+SP2网页木马生成器》(图3),运行程序后,点击“选择木马”后面的“浏览”,选择一个木马,然后点击“生成目录”后面的“浏览”,选择网页生成的目录。

再点击“确定”按钮,网页木马就生成了。上面选择的木马,黑客会进行免杀以增加木马的存活几率。免杀的方法有加壳、加花等。最后,将生成的网页木马上传到事先准备的空间里面,这样跨站挂马的前期准备工作就完成了。
第二步:构建挂马地址
构建挂马地址的过程比较麻烦,因为赶集网的查询页面对关键字做了一些处理,对单引号和双引号进行了转义。如果关键字中存在等号的话会跳转到另外一个页面去,例如查询内容为,就会跳转到另外一个页面(图4)。

所以必须想办法绕过网站的限制。我以http://www.baidu.com为例,讲解具体的绕过方法。如果用<iframe>的话,必然存在等号,所以我用<script>document.write('<iframe src=http://www.baidu.com>')</script>代替<iframe src=http://www.baidu.com></iframe>。

看到这里,或许有人会问,这段代码里面照样存在单引号和等号,还不是一样通不过?别急,我还有后招,派String.fromCodeat出马。最后的挂马地址如图5所示,在浏览器中输入该地址,就会看到效果了(图6)。

百度出现在赶集网的页面中,说明该网页的确可以挂马,如果把测试的百度地址换成网页木马的地址,打开该网页时就自动激活了木马,后果不堪设想。接下来,我再对挂马地址进行伪装,增加它的迷惑性,让一般人看不出端倪(图7)。

第三步:传播挂马地址
由于我利用的是赶集网进行挂马,http://bj.ganji.com出现在最前面,而挂马的代码出现在最后面,因此各种具有网址安全检测功能的软件都会认为它是赶集网的一条网址,因此不会报警。如果是黑客真的利用漏洞进行挂马,会通过QQ群、论坛等途径传播挂马地址。
漏洞解决方案
赶集网要想补上这个漏洞,就必须对网站程序中search_keyword关键字严格地过滤,不仅仅只作上述转义和等号跳转的处理,还要进行script、body、image、input、isindex过滤。此外,要定期对网站的程序进行安全检测,及时发现问题早日解决。
对普通用户而言,上网时一定要开启杀毒软件的实时监控功能,最好使用带网页木马拦截功能的安全辅助工具。遇到网址,不要盲目点击,先看看网址是不是被加密过,如果网址加密过最好就不要点击。