查詢和開啟3389端口方式總結
聲明:該公眾號大部分文章來自作者日常學習筆記,也有少部分文章是經過原作者授權和其他公眾號白名單轉載,未經授權,嚴禁轉載,如需轉載,聯系開白。 請勿利用文章內的相關技術從事非法測試,如因此產生的一切不良后果與文章作者和本公眾號無關。 |
這篇文章在去年的時候有發過,不過后邊又做了一點補充,所以再重新發一遍。
0x01 查詢3389端口方式總結
fDenyTSConnections值是計算機遠程管理中的開啟/關閉遠程桌面選項,fEnableWinStation值是遠程桌面會話主機配置中的RDP-TCP啟用/禁用連接選項,可以通過以下命令來查詢、開啟和關閉3389遠程桌面。
注:如果fDenyTSConnections值為0開啟狀態,但還是不能連接3389遠程桌面,這時我們可以去看下fEnableWinStation值是否為0了,1:Enable,0:Disable,該值在PC機上設置無效,因為沒有遠程桌面會話主機配置,從Windows 2012開始,tsconfig.msc和tsadmin.msc管理單元都已經被移除了。
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v fEnableWinStationreg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v fEnableWinStation /t REG_DWORD /d 1 /f
(1) REG查詢3389狀態(0:ON、1:OFF)
REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections

(2) REG查詢3389端口(16進制->10進制)
REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v PortNumberREG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumberset /a Port=0xd3d

(3) tasklist、netstat命令查詢3389端口
tasklist /svc | findstr "TermService"netstat -ano | findstr "2972"

注:有時也會遇到特殊情況,如某虛擬主機自建低權限用戶運行的IIS(Users、IIS_IUSRS),tasklist /svc不顯示服務名,注冊表查看是0xd3d,但netstat -ano里又沒有3389端口,這可能是因為3389遠程終端被關閉了,Users權限下只能根據個人經驗盲猜可疑端口號。

(4) Meterpreter的netstat查詢3389端口
有時我們會遇到不能執行netstat、tasklist和reg等命令的情況,這時可通過Meterpreter下的netstat命令來快速查詢3389端口,先找0.0.0.0運行的svchost.exe,然后根據個人經驗盲猜可疑端口。
常見端口大家都知道,如:FTP、RPC等,就不細說了,有順序的端口指定不是,剩下的就一個58895了。

0x02 開啟3389端口方式總結
如果目標主機沒有配置過遠程桌面服務,第一次開啟3389遠程桌面服務時可能需要添加下防火墻入站規則,允許3389端口,也可以選擇關閉系統自帶防火墻,命令如下。
netsh advfirewall firewall add rule name="Remote Desktop" protocol=tcp dir=in localport=3389 action=allow
修改3389端口前需要在防火墻添加修改遠程端口的入站規則,或者暫時關閉防火墻,否則用修改后的端口號可能會連接不上,修改完成后還需要重啟下TermService服務。
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 9527 /fnet stop TermService /ynet start TermService
(1) MSF命令開啟3389端口
支持系統:
- XP/Win2k3/Win7/Win2k8/Win8.1/Win10/2012/2016
meterpreter > run getgui -e [!] Meterpreter scripts are deprecated. Try post/windows/manage/enable_rdp.[!] Example: run post/windows/manage/enable_rdp OPTION=value [...][*] Windows Remote Desktop Configuration Meterpreter Script by Darkoperator[*] Carlos Perez carlos_perez@darkoperator.com[*] Enabling Remote Desktop[...SNIP...]

注:這個腳本可用于開啟目標機器的3389遠程桌面端口、創建管理員賬戶密碼、禁用遠程桌面(TCP-In)防火墻入站規則等。
(2) REG命令開啟3389端口
支持系統:
- XP/Win2k3/Win7/Win2k8/Win8.1/Win10/2012/2016(0:ON、1:OFF)
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

(3) WMIC命令開啟3389端口
支持系統:
- Win2k3/Win7/Win2k8/Win8.1/Win10/2012/2016(1:ON、0:OFF)
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1前提條件是確保“Windows Management Instrumentation(Winmgmt)”服務已正常啟動。

(4) WMIC開啟遠程主機3389端口:
支持系統:
- Win2k/XP/Win2k3
wmic /node:192.168.0.103 /user:administrator /password:betasec PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1
支持系統:
- Win7/Win2k8/Win8.1/Win10/2012/2016
wmic /node:192.168.0.116 /user:administrator /password:betasec!@#123 RDTOGGLE WHERE ServerName='WIN-TO2CN3V2VPR' call SetAllowTSConnections 1wmic /node:192.168.0.116 /user:administrator /password:betasec!@#123 process call create 'cmd.exe /c REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

注意事項:
- 其實就是利用WMIC遠程執行命令的方式來執行WMIC、REG等開啟3389端口的命令。
- WMIC遠程開啟3389端口時不能用%COMPUTERNAME%環境變量替代遠程主機的計算機名。
- 錯誤:描述 = 拒絕訪問,這是因為開啟了UAC用戶賬戶控制,只允許RID500管理員執行此操作。

(5) Windows API開啟3389端口
冷逸老哥用C++寫的“開3389工具”有點小問題,在兩臺Windows2008主機上測試時分別報出缺少vcruntime140.dll、api-ms-win-crt-runtime-l1-1-0.dll,可以自己去調試編譯下

根據@冷逸老哥的思路用C#也寫了一個,目標框架:.NET Framework 2.0,可用CobaltStrike execute-assembly加載到內存中實現無落地執行。
其工具原理就是利用RegCreateKeyEx和RegSetValueEx兩個API和Microsoft.Win32 RegistryKey類操作系統注冊表,與無Net.exe添加管理員用戶一樣,都是直接利用Windows API執行相應操作!!!
- https://github.com/3had0w/Open3389
應用場景-1:
目標主機因存在某安全防護軟件而無法用reg、wmic命令開啟3389端口時,可以嘗試使用這款工具來查詢和開啟3389端口,可用execute-assembly加載到內存中執行。

應用場景-2:
目標主機因存在某安全防護軟件(如:某鎖、某安全衛士)在攔截rundll32.exe時則不能用execute-assembly加載到內存中執行,所以只能選擇落地執行,目前為止還是免殺的。

(6) MSSQL xp_regwrite開啟3389端口
應用場景:
xp_cmdshell被禁用/刪除且無法恢復時,可嘗試用xp_regread、xp_regwrite來查詢和開啟目標機器3389端口,也可以選擇用sp_OACreate、Agent Job等其他命令執行方式。
1、查詢3389開啟狀態exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server' ,'fDenyTSConnections' 2、查詢3389遠程桌面端口exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp','PortNumber' 3、開啟3389遠程桌面端口(0:ON、1:OFF)exec master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;

(7) 一次開啟3389端口失敗原因的查找
通過計算機右鍵開啟遠程桌面或REG、WMIC開啟3389端口命令都執行成功,但netstat -ano沒有3389端口,tasklist /svc也沒有TermService服務,最后在Services.msc找到TermService服務時發現:<讀取描述失敗。錯誤代碼2>。出現這種情況是因為對應的C:\Windows\System32\termsrv.dll文件已經不存在了,可能是筆者以前在測試RDPWrap項目時給誤刪除掉了。

啟動TermService服務時必須加載termsrv.dll,所以無法通過常規方式開啟3389端口,這時我們只需要將原來備份的termsrv.dll或找到對應版本操作系統的termsrv.dll拷貝到C:\Windows\System32\目錄下,啟動TermService服務,重新開啟3389遠程桌面后即可解決。
