0x00前言
在滲透測試中,經常會接觸Windows服務器的遠程桌面服務,通過介面對服務器進行管理。而對於普通的Windows系統,在某些條件下也需要進行介面操作。
雖然我們可以通過編寫程式來實現介面操作(捕獲案頭資訊,壓縮傳輸,發送滑鼠鍵盤消息等),但是如果能够使用遠程桌面服務,豈不是更加方便高效
那麼,對應非服務器版本的Windows系統,在使用遠程桌面服務有哪些需要注意的問題呢,本文將會逐個分析介紹。
0x01簡介
本文將要介紹如下內容:
- 開啟遠程桌面的方法
- 使用mimikatz支持遠程桌面多用戶的原理
- 改進思路
- 測試工具rdpwrap
0x02開啟遠程桌面的方法
1、查詢系統是否允許3389遠程連接
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections
1表示關閉,0表示開啟
查看遠程連接的埠:
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber
埠格式為16進制,如下圖
0xd3d轉換為十進位為33389
0xd3d
33389
2、本機開啟3389遠程連接的方法
方法1:通過cmd
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f
方法2:通過reg檔案
內容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
"fDenyTSConnections"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
"PortNumber"=dword:00000d3d
導入註冊表:
注:
如果修改連接埠,系統重啟後才能生效
補充
如果系統未配寘過遠程桌面服務,第一次開啟時還需要添加防火牆規則允許3389埠,如下圖
修改防火牆配寘,允許3389埠的命令如下:
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
rdesktop 192.168.1.1:3389
Windows:
0x03非服務器版本的Windows系統默認只允許一個帳戶登入
具體表現為:
遠端存取時,使用與原系統相同的帳戶,原系統將被切換到登錄介面
如下圖
使用不同的帳戶,登入時提示其他用戶已登入到此電腦,如下圖
選擇繼續後,原系統案頭將彈框提示是否斷開當前連接(30秒後默認選擇同意,退回到登錄介面)
如下圖
0x04非服務器版本的Windows系統支援多用戶登錄的方法
1、使用mimikatz
privilege::debug
ts::multirdp
執行如下圖
開啟多用戶登錄功能,最高支持到Win7
使用與原系統相同的帳戶,原系統還是會被切換到登錄介面
使用與原系統不同的帳戶,登入成功,如下圖
通過查看mimikatz的源碼找到修改思路,程式碼位置如下:
https://github.com/gentilkiwi/mimikatz/blob/master/mimikatz/modules/kuhl_m_ts.c
Windows在開啟服務Remote Desktop Services時,會加載termsrv.dll,如下圖
通過修改記憶體中的termsrv.dll實現開啟多用戶功能,具體操作如下:
Win7 x86:
查找:0x3B86200300000F84
0x3B86200300000F84
替換為:0xC78620030000FFFFFF7F9090
0xC78620030000FFFFFF7F9090
Win7 x64:
查找:0x39873C0600000F84
0x39873C0600000F84
替換為:0xC7873C060000FFFFFF7F9090
0xC7873C060000FFFFFF7F9090
當然,該方法在系統重啟後失效
更近一步,如果我們直接修改檔案termsrv.dll,能否實現永久開啟多用戶登錄的功能呢?
繼續接下來的測試
2、修改termsrv.dll
推薦工具:CFF Explorer
CFF Explorer
c:\windows\system32
Hex Editor
查看十六進位數據39873C0600000F84
39873C0600000F84
如下圖
從0x0001738A處開始,選中12位元組,替換為C7873C060000FFFFFF7F9090
0x0001738A
C7873C060000FFFFFF7F9090
保存dll
注:
需要先停止遠程桌面服務才能替換termsrv.dll
替換termsrv.dll後,重新開啟服務TermService
嘗試使用不同用戶遠程連接,成功,驗證該思路正確
完整操作如下:
1.查看Remote Desktop Services服務狀態
2.如果服務啟動,需要先關閉
3.删除原termsrv.dll
del c:\windows\system32\termsrv.dll
4.替換新termsrv.dll
5.啟動服務
6.遠程連接
成功實現多用戶登錄
補充1:
Win7 x86:
查找:0x3B86200300000F84
0x3B86200300000F84
替換為:0xC78620030000FFFFFF7F9090
0xC78620030000FFFFFF7F9090
補充2
常見Windows系統的版本號:
3、使用工具rdpwrap
工程地址:
https://github.com/stascorp/rdpwrap
工具地址:
https://github.com/stascorp/rdpwrap/releases
支持Win Vista - Win 10
不修改termsrv.dll,通過傳入不同參數實現
安裝:
測試如下圖
釋放rdpwrap.dll和rdpwrap.ini至System32資料夾
rdpwrap.dll會被加載到同termsrv.dll相同的行程
此時,能够使用不同用戶進行遠程連接
卸載:
0x05小結
本文介紹了三種支持遠程桌面多用戶登錄的方法,適用於不同條件,對於替換termsrv.dll的方法,需要根據系統具體版本,使用不同的替換位置
LEAVE A REPLY