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