??windows系統中有一個名為SeTrustedCredmanAccessPrivilege的權限,使擁有該特權的行程可作為受信任的呼叫者訪問憑據管理器,
??憑據管理器可以從控制面板 -> 憑據管理器進入,憑據管理器允許用戶存盤憑據,比如域賬戶、Web、普通賬戶憑據等,管理器使用了DPAPI(Data Protect)進行保護,所以只有經過認證的賬戶可訪問關聯的存盤資料,程式使用CredRead或CredEnumerate可以訪問當前用戶存盤的憑據,但是讀取域賬戶憑據時,即設定讀取型別為CRED_TYPE_DOMAIN_PASSWORD,回傳密碼將為空,這是由于LSASS對該行為進行了限制,只有諸如NTLM、Kerberos 和 Negotiate等Microsoft身份驗證包在連接到指定目標時可不受限制地自動使用此憑據,
??除了注入LSASS、讀取LSASS或是手動實作DPAPI的方式(Mimikatz),作者提到了另一個名為CredBackupCredentials的系統API(LSASRV.DLL),該API被CREDWIZ.EXE用于備份用戶憑據,作為恢復使用,該備份包含所有憑據,包括域憑據,
BOOL WINAPI CredBackupCredentials(HANDLE Token,
LPCWSTR Path,
PVOID Password,
DWORD PasswordSize,
DWORD Flags);
??如果成功的話,呼叫API解密檔案內容即可獲取所有憑據,
??呼叫CredBackupCredentials的要求就是需要呼叫者具有SeTrustedCredmanAccessPrivilege權限,Winlogon中即含有這么個權限,也存在其他具有該權限的行程,比如LSASS,我們需要做的就是從具有該權限的一個行程中借用其令牌,作為呼叫憑據備份API使用,因此需要執行時具有管理員權限,
??作者給出了實作步驟:
- 使用PROCESS_QUERY_LIMITED_INFORMATION訪問方式打開winlogon行程(也可以選擇其他符合條件的行程),然后以TOKEN_DUPLICATE打開其令牌;
- 將打開的令牌復制為一個模擬令牌,之后啟用模擬令牌中的SetTrustedCredmanAccessPrivilege權限,模擬令牌型別需要為TokenPrimary,經過測驗TokenImpersonation將失敗(無法啟用權限);
- 打開備份憑據目標用戶的令牌,該用戶需要已經過身份驗證;
- 呼叫CredBackupCredentials,傳入引數指定備份后資料的寫入路徑;
- 從憑據備份檔案中讀取加密后資料,呼叫API CryptUnprotectData解密出被備份的憑據;
- 結束令牌模擬,RevertToSelf,

??CODE
參考:
https://www.tiraniddo.dev/2021/05/dumping-stored-credentials-with.html
https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/access-credential-manager-as-a-trusted-caller
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/285488.html
標籤:其他
上一篇:阿里云服務器安裝Docker并部署nginx、jdk、redis、mysql
下一篇:記一次crontab執行失敗
