Mimikatz 非官方指南和命令參考_Part3

wyzsk發表於2020-08-19
作者: Her0in · 2016/02/17 10:21

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

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

p1

Mimikatz 作為當下內網滲透神器之一,看起來似乎很少有人真正關注它的全部功能(Sean Metcalf 在原文開頭也表示了這樣的疑惑),在一些諸如 “十大駭客工具” 的文章中也看不到 Mimikatz 的影子。 Sean Metcalf 大牛將有關 Mimikatz 的相關技術做了系統的整理,遂做粗糙翻譯並作分享。譯文難免有誤,望各位看官及時指正。

此文是譯文的第三部分也是最後一部分。其餘兩部分的譯文連結如下:

0x00 最流行的 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 – 假冒一個擁有域管理員憑證的令牌。

0x01 Mimikatz 命令參考


Mimikatz 的模組如下:

LSADUMP

Mimikatz 的 LSADUMP 模組用於與 Windows 本地安全驗證(Windows Local Security Authority )(LSA) 程式進行互動來提取憑證資料。這個模組的大多數命令都需要 Debug 許可權(privlege::debug) 或者是 SYSTEM 許可權。預設情況下,管理員組(Administrators)擁有 Debug 許可權,但是依舊需要執行“privilege::debug”進行啟用。

LSADUMP:Backupkeys

需要管理員許可權。

p53

LSADUMP::Cache

需要管理員許可權。

獲取 SysKey 用於解密 NLKM 和 MSCache(v2)(來自注冊表或 hive 檔案) 。

p54

LSADUMP::DCSync

向 DC 發起同步一個物件(獲取帳戶的密碼資料)的質詢。

需要域管理員,域管理員組或者自定義委派的一個成員許可權

在 2015 年八月, Mimikatz 加入了一個新的特性—— “DCSync”,可以有效地“假冒”一個域控制器,並可以向目標域控制器請求帳戶密碼資料。此功能是由Benjamin Delpy 和 Vincent Le Toux 一起編寫的。

之前利用 DCSync 的攻擊方法是在域控制器上執行 Mimikatz 或 Invoke-Mimikatz 得到 KRBTGT 賬戶的密碼雜湊建立黃金票證。如果使用適當的許可權執行 Mimikatz 的 DCSync 功能,攻擊者就可以透過網路遠端讀取域控制器的密碼雜湊,以及以前的密碼的雜湊,且無需互動式登入或複製 Active Directory 的資料庫檔案(NTDS.DIT)。

執行 DCSync 所要求的特殊許可權有管理員組(Administrators),域管理員組( Domain Admins)或企業管理員組(Enterprise Admins)以及域控制器計算機帳戶的任何成員都能夠執行 DCSync 去讀取密碼資料。需要注意的是隻讀域控制器預設是不允許讀取使用者密碼資料的。

DCSync 是何如工作的:

我之前捕獲了一些域控制器複製資料的資料包,並確認了有關域控制器如何複製內部 DC 資料的通訊流。

Samba Wiki 描述了 DSGetNCChanges 函式,如下:

“當第一個得到的 AD 物件從第二個更新時,客戶端 DC 會向伺服器傳送 DSGetNCChanges 請求。響應的資料包含了一組客戶端必須應用到其 NC 副本的更新。

當 DC 收到一個 DSReplicaSync 請求後,它會執行一個複製週期,去複製每一個它要複製的 DC (儲存在 RepsFrom 資料結構中),此時它的行為就像一個客戶端,會傳送 DSGetNCChanges 請求到那個所要複製的 DC 去。所以它獲得了每個它所複製的 DC 的最新的 AD 物件。

DCSync 選項:

  • /user - 要拉取資料的使用者的 id 或 SID
  • /domain(可選的) Active Directory 域的 FQDN 域名,Mimikatz 會發現域中的一個 DC 並去連線。如果不提供該引數,Mimikatz 會預設設定為當前域。
  • /dc(可選的)指定你想要使用 DCSync 連線並收集資料的域控制器。 另外還有一個/guid引數。

DCSync 命令列示例:

拉取 rd.adsecurity.org 域中的 KRBTGT 使用者帳戶的密碼資料:

#!bash
Mimikatz "privilege::debug" "lsadump::dcsync /domain:rd.adsecurity.org /user:krbtgt" exit

拉取 rd.adsecurity.org 域中的 Administrator 使用者帳戶的密碼資料:

#!bash
Mimikatz "privilege::debug" "lsadump::dcsync /domain:rd.adsecurity.org /user:Administrator" exit

拉取 lab.adsecurity.org 域中 ADSDC03 域控制器的計算機帳戶的密碼資料:

#!bash
Mimikatz "privilege::debug" "lsadump::dcsync /domain:lab.adsecurity.org /user:adsdc03$" exit

p2

LSADUMP::LSA

向 LSA Server 質詢檢索 SAM/AD 的資料(正常或未打補丁的情況下)。可以從 DC 或者是一個 lsass.dmp 的轉儲檔案中匯出所有的 Active Directory 域憑證資料。同樣也可以獲取指定帳戶的憑證,如 krbtgt 帳戶,使用 /name 引數,如:“/name:krbtgt”需要 Debug 或 SYSTEM 許可權。

  • /inject - 注入 LSASS 程式提取憑證資料
  • /name - 目標使用者賬戶的帳戶名稱
  • /id - 目標使用者賬戶的 RID
  • /patch - 補丁 LSASS 程式

通常,服務帳戶是域管理員組(或同等許可權)的一個成員,或者是一個攻擊者匯出憑證的最近登入到計算機的域管理員使用者。使用這些憑證,一個攻擊者可以獲得DC的訪問許可權並且能夠得到整個域的憑證,包括被用於建立 Kerberos 黃金票證的 KRBTGT 帳戶的 NTLM 雜湊。

命令列:mimikatz lsadump::lsa /inject exit

在 DC 中執行此命令可以轉儲活動目錄中域的憑證資料。

需要管理員許可權(使用 DEBUG 許可權即可)或者是 SYSTEM 許可權。

RID 為 502 的帳戶是 KRBTGT 帳戶,RID 為 500 的帳戶是預設的域管理員賬戶。

p3

下圖是執行 LSADUMP::lsa /patch 命令後只匯出了 NTLM 密碼雜湊的執行結果。

p4

LSADUMP::Rpdata

LSADUMP::SAM – 獲得用於解密 SAM 專案(從登錄檔或hive中獲取)資料的 Syskey。SAM 連線到了本地安全帳戶管理器(SAM)資料庫並且會轉儲本地帳戶的憑證資料。

需要 SYSTEM 或 DEBUG 許可權。

它包含使用者密碼的 NTLM 和 一些 LM 雜湊。此命令可以在兩種模式下工作,線上模式(使用 SYSTEM 的使用者或token)或者是離線模式(使用 SYSTEM & SAM hives資料 或備份資料)

針對一個“線上”的 SAM 檔案,需要管理員許可權(使用 DEBUG 許可權即可)或者本地 SYSTEM 許可權。

獲取一個模擬的 SYSTEM 令牌: Mimikatz “PRIVILEGE::Debug” “TOKEN:elevate”

p5

LSADUMP::Secrets – 獲取用於解密 SECRETS 項(從登錄檔或hive資料中獲取)資料的 Syskey。

需要 SYSTEM 或 DEBUG 許可權。

p6

LSADUMP::Trust

質詢 LSA 伺服器檢索信任認證資訊。

需要 SYSTEM 或 DEBUG 許可權。

從活動目錄中已有的域信任關係中提取資料。信任的金鑰(密碼)也將會顯示出來。

p7

MISC

Mimikatz 的 MISC 模組是一個包含了一些相當不合適的其他的命令。

在這個模組中有幾個比較知名的命令,MISC::AddSID, MISC::MemSSP, and MISC::Skeleton

MISC::AddSid – 將使用者賬戶新增到 SIDHistory 中。第一個值是目標賬戶,第二個值是賬戶/組名稱(或 SID)。

需要 SYSTEM 或 DEBUG 。

p8

p9

MISC::Cmd - 命令列提示(無 DisableCMD)。

需要管理員許可權。

p10

MISC::Detours – (實驗) 嘗試使用 Detours HOOK 列舉所有的模組。

需要管理員許可權。

p11

MISC::MemSSP – 注入一個記錄本地身份認證憑證的惡意的 Windows SSP,透過在記憶體中對 LSASS 程式使用新的 SSP 進行補丁,此操作無需重啟,重啟會清除 Mimikatz 注入的 SSP。詳情請見《Mimikatz SSP 記憶體補丁以及更多 SSP 持久化技術》

需要管理員許可權。

p12

曼迪昂特對 MemSSP 的介紹

MISC::Ncroutemon – Juniper 管理器 (無 DisableTaskMgr)
MISC::Regedit – 登錄檔編輯器 (無 DisableRegistryTools)

需要管理員許可權。

p13

MISC::Skeleton - 在 DC 上將 Skeleton 金鑰注入到 LSASS 程式中。

需要管理員許可權。

此操作會對 DC 進行補丁,使得所有使用者將使用的 “主密碼” (又名萬能鑰匙)以及他們自己通常使用的密碼進行身份驗證。

p14

MISC::Taskmgr - 工作管理員(無 DisableTaskMgr)

需要管理員許可權。

p15

MISC::Wifi

MINESWEEPER

MINESWEEPER::Infos – 提供 minesweeper 的雷達資訊。

Net

NET::User
NET::Group
NET::LocalGroup

PRIVILEGE

PRIVILEGE::Debug - 獲取 DEBUG 許可權。(DEBUG 或 SYSTEM 許可權是很多 Mimikatz 命令所需要的許可權)

預設情況下:管理員組擁有 DEBUG 許可權。但是依舊需要使用 “privilege::debug” 命令進行啟用。

DEBUG 許可權允許你對一個沒有其他方式接觸的程式進行除錯。例如,一個擁有DEBUG許可權的使用者程式的令牌可以對一個使用本地 SYSTEM 許可權執行的服務程式除錯。

http://msdn.microsoft.com/library/windows/hardware/ff541528.aspx

p16

Benjamin 對此命令的備註資訊:

如果執行此命令出現ERROR kuhl_m_privilege_simple ; RtlAdjustPrivilege (20) c0000061 錯誤,可能你沒有使用管理員許可權執行此命令。

PROCESS

Mimikatz 的 PROCESS 模組提供了收集程式的資料和與程式進行互動的功能。

PROCESS::Exports – 列出程式可執行檔案的匯出表

p17

PROCESS::Imports – 列出程式可執行檔案的匯入表

p18

PROCESS::List – 列出正在執行的程式。

需要管理員許可權。
p19

PROCESS::Resume - 恢復一個程式

p20

PROCESS::Start – 啟動一個程式
PROCESS::Stop – 結束一個程式
PROCESS::Suspend – 掛起一個程式

p21

SERVICE

SERVICE::List – 列出所有服務
SERVICE::Preshutdown – 預關掉服務
SERVICE::Remove – 解除安裝服務
SERVICE::Resume – 恢復服務
SERVICE::Shutdown – 關掉服務
SERVICE::Start – 啟動一個服務
SERVICE::Stop – 停止服務
SERVICE::Suspend – 掛起服務

SEKURLSA

Mimikatz 的 SEKURLSA 模組提供了與被保護的記憶體進行互動的功能。此模組能夠從 LSASS(本地安全認證子系統服務) 程式的記憶體中提取密碼,金鑰,pin 碼,票證。
為了能夠與 LSASS 程式進行互動,Mimikatz 程式需要適當的許可權:

  • 管理員許可權,使用 “PRIVILEGE::Debug” 命令獲取 DEBUG 許可權
  • SYSTEM 許可權,使用 “TOKEN::elevate” 獲取 SYSTEM 許可權

轉儲 LSASS 程式記憶體檔案,不需要程式許可權提升操作。

SEKURLSA::Backupkeys - 獲得首選備份的主金鑰。

p22

SEKURLSA::Credman - 列出憑證管理器

p23

SEKURLSA::Dpapi – 列出已快取的主金鑰

p24

SEKURLSA::DpapiSystem - 獲取 DPAPI_SYSTEM 密文

p25

SEKURLSA::Ekeys – 列出 Kerberos 加密金鑰

![p26][288]

SEKURLSA::Kerberos – 列出所有已透過驗證的使用者(包括服務和計算機帳戶)的 Kerberos 憑證。

p27

SEKURLSA::Krbtgt - 獲取域 Kerberos 服務帳戶(KRBTGT)密碼資料

p28

SEKURLSA::LiveSSP – 列出 LiveSSP 憑證

p29

SEKURLSA::LogonPasswords – 列出所有可用的提供者的憑證資料。命令執行結果會顯示最近登陸的使用者和計算機的憑證。

  • 轉儲儲存在 LSASS 程式中,當前已登陸或最近登入的帳戶以及使用使用者憑證上下文執行的服務的密碼資料。
  • 帳戶密碼使用可逆的方式儲存在記憶體中。如果在記憶體中有這些資料(Windows 8.1/Windows Server 2012 R2之前),那麼這些資料將會被顯示出來。在大多數情況下,Windows 8.1/Windows Server 2012 R2 並沒有使用相同的方式儲存帳戶密碼。KB2871997 補丁講此安全特性相容至 Windows 7, Windows 8, Windows Server 2008R2 和 Windows Server 2012 中,儘管在應用了 KB2871997 補丁後需要對計算機進行額外的配置。
  • 需要管理員許可權(帶有 DEBUG 許可權)或 本地 SYSTEM 許可權

Windows Server 2008 R2 (顯示明文密碼)

p30

Windows Server 2012 R2 (未顯示明文密碼)

p31

同樣可以使用此命令將使用帳戶憑證執行的服務的憑證進行轉儲。需要注意的是,只有服務正在執行(執行後憑證才會儲存在記憶體中)才可以使用此方式進行轉儲。

p32

p33

p34

SEKURLSA::Minidump – 切換到“輕量級”轉儲 LSASS 程式上下文

需要注意的是,Minidumps 是對相同的平臺上進行轉儲的資料進行讀取, NT5 Win32 or NT5x64 or NT6 Win32 or NT6 x64。

p35

SEKURLSA::MSV – 列出 LM 和 NTLM 憑證資料

p36

SEKURLSA::Process – 轉換到 LSASS 程式上下文

p37

SEKURLSA::Pth – Hash 傳遞, key 傳遞

Mimikatz 可以執行眾所周知的“Hash 傳遞”,使用另一個使用者密碼的 NTLM 雜湊上下文代替其真實的明文密碼執行一個程式。為此,它會啟動一個帶有假冒身份資訊的程式,之後會替換假資訊(假密碼的 NTLM 雜湊)為真實的資訊(真正的密碼的 NTLM 雜湊)。

  • /user - 你想進行假冒的使用者名稱,需要明白的是,Administrator 不是唯一一個已知的帳戶。
  • /domain – 域名稱的 FQDN,無需新增本地使用者名稱火管理員名稱,可以使用計算機或伺服器名稱,工作組名稱。
  • /rc4 or /ntlm (可選的) – 指定使用者的 RC4 金鑰 或 NTLM 雜湊。
  • /run (可選的) – 需要執行的命令列 – 預設為:cmd ,得到一個 cmd shell。

p38

Benjamin 對此命令的備註:

  • 該命令不能與 minidumps 一起使用
  • 需要許可權提升(privilege::debug 或 SYSTEM 帳戶),不像票證傳遞(Pass-The-Ticket)使用官方的 API,新版本的雜湊傳遞透過使用 NTLM 雜湊(或者是 AES 金鑰)替換 Kerberos 的 RC4 金鑰 - 它允許 Kerberos 提供者質詢 TGT 票證。
  • 在 WinXP/2003/Vista/2008 ,以及未打 kb2871997 補丁之前(AES 不可用或不可替代)的 Win7/2008r2/8/2012 中強制使用 NTLM 雜湊。
  • AES 金鑰只有在 8.1/2012r2 和打了 kb2871997 補丁的 7/2008r2/8/2012 中才可以替換,在這種情況下,你可以避免使用 NTLM 雜湊。

Benjamin 發表了一篇關於金鑰傳遞的文章

SEKURLSA::SSP - 列出 SSP 憑證。

p39

SEKURLSA::Tickets - 列出最近所有已經過身份驗證的使用者的可用的 Kerberos 票證,包括使用使用者帳戶的上下文執行的服務和本地計算機在 AD 中的計算機帳戶。

與 kerberos::list 不同的是 sekurlsa 使用記憶體讀取的方式,它不會受到金鑰匯出的限制。

  • /export (可選的)-匯出票證到 .kirbi 檔案中。檔名稱使用使用者的 LUID 和組編號(0 = TGS, 1 = 客戶端票證(?) , 2 = TGT)作為開頭。

類似於從 LSASS 中轉儲憑證資料,利用 SEKURLSA 模組,攻擊者可以獲取到所有在記憶體中的 Kerberos 票證資料,包括那些屬於管理員或服務的票證。

如果攻擊者已經入侵了一臺使用 Kerberos 委派配置的 Web 伺服器,在使用者訪問後端的 SQL 伺服器時,這是非常有用的。這使得攻擊者能夠捕捉和重用該伺服器上記憶體中的所有使用者的票證。

Mimikatz 的 “kerberos::tickets” 命令可以轉儲當前已登陸的使用者的 Kerberos 票證並且不需要許可權提升。利用 SEKURLSA 模組的功能,可以讀取被保護的記憶體(LSASS),在系統中的所有的 Kerberos 票證均可以轉儲。

命令:mimikatz sekurlsa::tickets exit

  • 轉儲系統中所有已透過驗證的 Kerberos 票證
  • 需要已啟用 DEBUG 許可權的管理員許可權或本地 SYSTEM 許可權

下圖顯示了轉儲另外一個域管理員(LukeSkywalker)的密碼和Kerberos票證(TGS 和 TGT)。
p40

p41

下圖顯示了轉儲另外一個域管理員(HanSolo)的密碼和Kerberos票證(TGS 和 TGT)。
p42

下圖顯示了轉儲一個 SQL 服務帳戶(svc-SQLDBEngine01)的密碼和Kerberos票證(TGS 和 TGT)。
p43

SEKURLSA::Trust – 獲取信任金鑰

(我認為此命令已過時,可以使用 lsadump::trust /patch)

SEKURLSA::TSPKG - 列出 TsPkg 憑證。

p44

SEKURLSA::Wdiget - 列出 Wdiget 憑證。

p45

STANDARD

STANDARD::Base64 – 轉換輸出到 Base64 輸出
STANDARD::CD – 改變或顯示當前資料夾
STANDARD::CLS – 清屏
STANDARD::Exit – 退出 Mimikatz
STANDARD::Log – 記錄 Mimikatz 資料到日誌檔案中
STANDARD::Sleep – 指定毫秒級的延時
STANDARD::Version – 顯示版本資訊

TOKEN

Mimikatz 的 Token 模組能夠與 Windows 身份驗證令牌進行互動,包括抓取,偽造假冒的已存在的令牌。

TOKEN::Elevate – 假冒令牌。用於提升許可權至 SYSTEM 許可權(預設)或者使用 Windows API 找到域管理員令牌。

需要管理員許可權。
p46

找到一個域管理員憑證並且使用該域管理員的令牌:

token::elevate /domainadmin

p47

TOKEN::List - 列出系統中所有的令牌

p48

TOKEN::Revert - 恢復程式令牌

p49

TOKEN::Whoami – 顯示當前身份資訊

p50

TS

TS::Multirdp - (實驗) 補丁終端伺服器服務允許多個使用者連線

p51

VAULT

VAULT::List - 列出 Vault 憑證

p52

VAULT::Cred - cred

原文所有權歸 Sean Metcalf (ADSecurity.org) 所有
本文由 Her0in 翻譯並首發於烏雲 drops,轉載請註明出處

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章