Cmd的終極防守
一 前言翻開網(wǎng)絡(luò)上的入侵資料看看吧!大多數(shù)的入侵都是在cmd下完成的,比較典型的有溢出得到一個(gè)system權(quán)限的cmdshell,然后種植一個(gè)Tcmd之 類綁定了cmd.exe的后門。也有利用web程序的漏洞得到一個(gè)webshell然后利用低權(quán)限的cmdshell來(lái)提升權(quán)限,最后再種植后門……各種 各樣的攻擊都說(shuō)明入侵和cmd.exe是相關(guān)的,因?yàn)橐粋€(gè)cmd.exe就是一個(gè)用戶與系統(tǒng)交互的一個(gè)接口,是入侵者進(jìn)入系統(tǒng)的首要目標(biāo)。當(dāng)然,我們不能 在這里坐以待斃,如何防止別人通過(guò)溢出得到你的cmdshell,如何知道別人已經(jīng)進(jìn)入系統(tǒng)并且獲得cmdshell,如何在人家登陸到我們機(jī)器的時(shí)候抓 住入侵者呢?現(xiàn)在就讓我們打造一個(gè)cmd下的終極防線吧。
二 原理
網(wǎng)絡(luò)上談得比較多的一種防范的方法是將cmd.exe設(shè)置權(quán)限,這樣的確可以起到很大的作用,但是權(quán)限比較難以確定,并且如果別人自己上傳cmd.exe 的話還是可以突破的,然后用nc綁定cmd.exe到一個(gè)端口還是可以得到cmdshell。今天我給大家介紹一種新的方法,不用設(shè)置cmd的權(quán)限哦!首 先說(shuō)說(shuō)原理,還是打開你的cmd命令窗口,運(yùn)行命令cmd /?,看看得到了什么吧!如圖一。
注意以下內(nèi)容:
如果 /D 未在命令行上被指定,當(dāng) CMD.EXE 開始時(shí),它會(huì)尋找以下 REG_SZ/REG_EXPAND_SZ 注冊(cè)表變量。如果其中一個(gè)或兩個(gè)都存在,這兩個(gè)變量會(huì)先被執(zhí)行。
HKEY_LOCAL_MACHINE"Software"Microsoft"Command Processor"AutoRun
和/或
HKEY_CURRENT_USER"Software"Microsoft"Command Processor"AutoRun
也 就是說(shuō)如果存在HKEY_LOCAL_MACHINE"Software"Microsoft"Command Processor"AutoRun和HKEY_CURRENT_USER"Software"Microsoft"Command Processor"AutoRun這兩個(gè)鍵值并且你不是用cmd.exe /D啟動(dòng)cmd進(jìn)程的話會(huì)在啟動(dòng)cmd.exe之前先去執(zhí)行這兩個(gè)鍵值指定的程序。嘿嘿,想到什么了,既然可以先于cmd.exe之前執(zhí)行自己的程序或者 腳本,我們就完全可以控制cmd.exe的動(dòng)作了。
三 實(shí)戰(zhàn)
我們找到了我們可以利用的東西,現(xiàn)在看看如何利用cmd.exe的這個(gè)特性來(lái)做些什么吧!關(guān)鍵是編輯
HKEY_CURRENT_USER"Software"Microsoft"Command Processor"AutoRun的內(nèi)容(沒(méi)有的話你可以新建一個(gè))為你自定義的一個(gè)腳本的位置,為了方便我們可以使用批處理,我的系統(tǒng)是2000 adv server。譬如你可以在c:"winnt"system32下寫入一個(gè)cmd.bat的批處理文件,內(nèi)容為你希望在啟動(dòng)cmd.exe進(jìn)程之前要運(yùn)行 的命令,然后編輯HKEY_CURRENT_USER"Software"Microsoft"Command Processor"AutoRun的內(nèi)容為c:"winnt"system32"cmd.bat如圖二。
假 設(shè)你的機(jī)器并不是經(jīng)常及時(shí)打上補(bǔ)丁,你就可以編輯system32下cmd.bat的內(nèi)容為exit,這樣就抵御黑客的遠(yuǎn)程溢出攻擊了,因?yàn)橐话愕囊绯鲆? 么是反彈一個(gè)cmdshell要么是綁定一個(gè)cmdshell,而溢出的shellcode執(zhí)行cmd之后會(huì)首先運(yùn)行的是我們指定的cmd.bat里面的 內(nèi)容,而內(nèi)容正是exit退出,這里為了給大家示范我指定的命令是pause命令,如圖三。
這樣不知道真相的人肯定會(huì)很郁悶的,即使知道真相如果他是一般的菜鳥的我想對(duì)這樣的問(wèn)題他也是束手無(wú)策吧,除非他使用的是其他的shellcode。
光是這樣的防范還沒(méi)有什么意思,我們最好能夠抓住入侵者,那我們就好好的寫這個(gè)cmd.bat腳本吧!要抓住入侵者或者想知道入侵事件發(fā)生的時(shí)間我們可以定義cmd.bat的內(nèi)容如下:
@echo off ""關(guān)閉命令回顯""
@netstat -an>>c:"winnt"system32"net.log ""取得當(dāng)前的網(wǎng)絡(luò)連接狀態(tài)并輸出到net.log文件,用>>重定向是避免日志被后來(lái)的沖洗掉""
@date /t>>c:"winnt"system32"date.log ""取得入侵發(fā)生的時(shí)間""
@time /t>>c:"winnt"system32"time.log
@exit ""退出""
這樣當(dāng)有人溢出的時(shí)候他的IP就在日志里啦!你完全可以根據(jù)自己的情況補(bǔ)充這個(gè)腳本的內(nèi)容,如查看進(jìn)程,查看端口關(guān)聯(lián)等等,因?yàn)椴皇窍到y(tǒng)自帶的程序我就不給大家展示了!
但是是不是只能做這么多呢?看到以前的雜志有人寫用telnet愚弄入侵者,有了今天的方法可不只能用telnet愚弄入侵者了,所有的綁定cmd.exe的程序都可以被我們愚弄的。譬如我們?cè)赾md.bat里寫上:
@echo off ""關(guān)閉命令回顯""
@netstat -an>>c:"winnt"system32"net.log ""取得當(dāng)前的網(wǎng)絡(luò)連接狀態(tài)并輸出到net.log文件,用>>重定向是避免日志被后來(lái)的沖洗掉""
@date /t>>c:"winnt"system32"date.log ""取得入侵發(fā)生的時(shí)間""
@time /t>>c:"winnt"system32"time.log
@type c:"winnt"system32"cmd.txt ""打印cmd.txt的內(nèi)容,也是由我們自己定義的""
@pause ""暫停程序,讓入侵者惋惜去吧!""
@exit ""退出程序""
這樣我們就可以對(duì)入侵者喊話了,喊些什么呢?罵人的話就不要喊了,我這里就給自己做個(gè)廣告吧,別人telnet上來(lái)我的機(jī)器上時(shí)如圖四
我的日志內(nèi)容如圖五。
其實(shí)從任何的cmd后門上登陸時(shí)都是這樣的效果,我的Tcmd就很郁悶,呵呵!這些在webshell里也是很有奇效的,大家還可以發(fā)揮自己的想象力哦,沒(méi)有什么做不到的。
四 總結(jié)
文章沒(méi)有什么高深的東西,其實(shí)就是cmd的一個(gè)屬性,與設(shè)置權(quán)限配合使用,用得好的話效果還是很不錯(cuò)的。有人要問(wèn)了,這樣設(shè)置以后我們自己?jiǎn)?dòng)cmd怎么 辦,很好說(shuō)的,就是運(yùn)行的時(shí)候用cmd /D參數(shù)啟動(dòng)就可以了。有什么問(wèn)題或者建議歡迎到論壇討論,我的ID是劍心。(相關(guān)代碼已經(jīng)收錄)
附:
cmd.bat
@echo off
@netstat -an>>c:"winnt"system32"net.log
@date /t>>c:"winnt"system32"date.log
@time /t>>c:"winnt"system32"time.log
@echo on
@type c:"winnt"system32"cmd.txt
@pause
@exit
cmd.reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE"SOFTWARE"Microsoft"Command Processor]
"AutoRun"="c:""winnt""system32""cmd.bat"
posted on 2007-12-24 00:15 Athena 閱讀(187) 評(píng)論(0) 編輯 收藏 所屬分類: 操作系統(tǒng)