原文地址: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 命令及相關功能。
Mimikatz 的模塊如下:
Mimikatz 的 LSADUMP 模塊用于與 Windows 本地安全驗證(Windows Local Security Authority )(LSA) 進程進行交互來提取憑證數據。這個模塊的大多數命令都需要 Debug 權限(privlege::debug) 或者是 SYSTEM 權限。默認情況下,管理員組(Administrators)擁有 Debug 權限,但是依舊需要運行“privilege::debug”進行激活。
需要管理員權限。
需要管理員權限。
獲取 SysKey 用于解密 NLKM 和 MSCache(v2)(來自注冊表或 hive 文件) 。
向 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 選項:
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
向 LSA Server 質詢檢索 SAM/AD 的數據(正常或未打補丁的情況下)。可以從 DC 或者是一個 lsass.dmp 的轉儲文件中導出所有的 Active Directory 域憑證數據。同樣也可以獲取指定帳戶的憑證,如 krbtgt 帳戶,使用 /name 參數,如:“/name:krbtgt”需要 Debug 或 SYSTEM 權限。
通常,服務帳戶是域管理員組(或同等權限)的一個成員,或者是一個攻擊者導出憑證的最近登錄到計算機的域管理員用戶。使用這些憑證,一個攻擊者可以獲得DC的訪問權限并且能夠得到整個域的憑證,包括被用于創建 Kerberos 黃金票證的 KRBTGT 帳戶的 NTLM 哈希。
命令行:mimikatz lsadump::lsa /inject exit
在 DC 中執行此命令可以轉儲活動目錄中域的憑證數據。
需要管理員權限(使用 DEBUG 權限即可)或者是 SYSTEM 權限。
RID 為 502 的帳戶是 KRBTGT 帳戶,RID 為 500 的帳戶是默認的域管理員賬戶。
下圖是運行 LSADUMP::lsa /patch 命令后只導出了 NTLM 密碼哈希的執行結果。
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”
LSADUMP::Secrets – 獲取用于解密 SECRETS 項(從注冊表或hive數據中獲取)數據的 Syskey。
需要 SYSTEM 或 DEBUG 權限。
質詢 LSA 服務器檢索信任認證信息。
需要 SYSTEM 或 DEBUG 權限。
從活動目錄中已有的域信任關系中提取數據。信任的密鑰(密碼)也將會顯示出來。
Mimikatz 的 MISC 模塊是一個包含了一些相當不合適的其他的命令。
在這個模塊中有幾個比較知名的命令,MISC::AddSID, MISC::MemSSP, and MISC::Skeleton。
MISC::AddSid – 將用戶賬戶添加到 SIDHistory 中。第一個值是目標賬戶,第二個值是賬戶/組名稱(或 SID)。
需要 SYSTEM 或 DEBUG 。
MISC::Cmd - 命令行提示(無 DisableCMD)。
需要管理員權限。
MISC::Detours – (實驗) 嘗試使用 Detours HOOK 列舉所有的模塊。
需要管理員權限。
MISC::MemSSP – 注入一個記錄本地身份認證憑證的惡意的 Windows SSP,通過在內存中對 LSASS 進程使用新的 SSP 進行補丁,此操作無需重啟,重啟會清除 Mimikatz 注入的 SSP。詳情請見《Mimikatz SSP 內存補丁以及更多 SSP 持久化技術》。
需要管理員權限。
MISC::Ncroutemon – Juniper 管理器 (無 DisableTaskMgr)
MISC::Regedit – 注冊表編輯器 (無 DisableRegistryTools)
需要管理員權限。
MISC::Skeleton - 在 DC 上將 Skeleton 密鑰注入到 LSASS 進程中。
需要管理員權限。
此操作會對 DC 進行補丁,使得所有用戶將使用的 “主密碼” (又名萬能鑰匙)以及他們自己通常使用的密碼進行身份驗證。
MISC::Taskmgr - 任務管理器(無 DisableTaskMgr)
需要管理員權限。
MISC::Wifi
MINESWEEPER::Infos – 提供 minesweeper 的雷達信息。
NET::User
NET::Group
NET::LocalGroup
PRIVILEGE::Debug - 獲取 DEBUG 權限。(DEBUG 或 SYSTEM 權限是很多 Mimikatz 命令所需要的權限)
默認情況下:管理員組擁有 DEBUG 權限。但是依舊需要使用 “privilege::debug” 命令進行激活。
DEBUG 權限允許你對一個沒有其他方式接觸的進程進行調試。例如,一個擁有DEBUG權限的用戶進程的令牌可以對一個使用本地 SYSTEM 權限運行的服務進程調試。
http://msdn.microsoft.com/library/windows/hardware/ff541528.aspx
Benjamin 對此命令的備注信息:
如果執行此命令出現ERROR kuhl_m_privilege_simple ; RtlAdjustPrivilege (20) c0000061 錯誤,可能你沒有使用管理員權限執行此命令。
Mimikatz 的 PROCESS 模塊提供了收集進程的數據和與進程進行交互的功能。
PROCESS::Exports – 列出進程可執行文件的導出表
PROCESS::Imports – 列出進程可執行文件的導入表
PROCESS::List – 列出正在運行的進程。
需要管理員權限。
PROCESS::Resume - 恢復一個進程
PROCESS::Start – 啟動一個進程
PROCESS::Stop – 結束一個進程
PROCESS::Suspend – 掛起一個進程
SERVICE::List – 列出所有服務
SERVICE::Preshutdown – 預關掉服務
SERVICE::Remove – 卸載服務
SERVICE::Resume – 恢復服務
SERVICE::Shutdown – 關掉服務
SERVICE::Start – 啟動一個服務
SERVICE::Stop – 停止服務
SERVICE::Suspend – 掛起服務
Mimikatz 的 SEKURLSA 模塊提供了與被保護的內存進行交互的功能。此模塊能夠從 LSASS(本地安全認證子系統服務) 進程的內存中提取密碼,密鑰,pin 碼,票證。
為了能夠與 LSASS 進程進行交互,Mimikatz 進程需要適當的權限:
轉儲 LSASS 進程內存文件,不需要進程權限提升操作。
SEKURLSA::Backupkeys - 獲得首選備份的主密鑰。
SEKURLSA::Credman - 列出憑證管理器
SEKURLSA::Dpapi – 列出已緩存的主密鑰
SEKURLSA::DpapiSystem - 獲取 DPAPI_SYSTEM 密文
SEKURLSA::Ekeys – 列出 Kerberos 加密密鑰
![p26][288]
SEKURLSA::Kerberos – 列出所有已通過驗證的用戶(包括服務和計算機帳戶)的 Kerberos 憑證。
SEKURLSA::Krbtgt - 獲取域 Kerberos 服務帳戶(KRBTGT)密碼數據
SEKURLSA::LiveSSP – 列出 LiveSSP 憑證
SEKURLSA::LogonPasswords – 列出所有可用的提供者的憑證數據。命令執行結果會顯示最近登陸的用戶和計算機的憑證。
Windows Server 2008 R2 (顯示明文密碼)
Windows Server 2012 R2 (未顯示明文密碼)
同樣可以使用此命令將使用帳戶憑證運行的服務的憑證進行轉儲。需要注意的是,只有服務正在運行(運行后憑證才會存儲在內存中)才可以使用此方式進行轉儲。
SEKURLSA::Minidump – 切換到“輕量級”轉儲 LSASS 進程上下文
需要注意的是,Minidumps 是對相同的平臺上進行轉儲的數據進行讀取, NT5 Win32 or NT5x64 or NT6 Win32 or NT6 x64。
SEKURLSA::MSV – 列出 LM 和 NTLM 憑證數據
SEKURLSA::Process – 轉換到 LSASS 進程上下文
SEKURLSA::Pth – Hash 傳遞, key 傳遞
Mimikatz 可以執行眾所周知的“Hash 傳遞”,使用另一個用戶密碼的 NTLM 哈希上下文代替其真實的明文密碼運行一個進程。為此,它會啟動一個帶有假冒身份信息的進程,之后會替換假信息(假密碼的 NTLM 哈希)為真實的信息(真正的密碼的 NTLM 哈希)。
Benjamin 對此命令的備注:
SEKURLSA::SSP - 列出 SSP 憑證。
SEKURLSA::Tickets - 列出最近所有已經過身份驗證的用戶的可用的 Kerberos 票證,包括使用用戶帳戶的上下文運行的服務和本地計算機在 AD 中的計算機帳戶。
與 kerberos::list 不同的是 sekurlsa 使用內存讀取的方式,它不會受到密鑰導出的限制。
類似于從 LSASS 中轉儲憑證數據,利用 SEKURLSA 模塊,攻擊者可以獲取到所有在內存中的 Kerberos 票證數據,包括那些屬于管理員或服務的票證。
如果攻擊者已經入侵了一臺使用 Kerberos 委派配置的 Web 服務器,在用戶訪問后端的 SQL 服務器時,這是非常有用的。這使得攻擊者能夠捕捉和重用該服務器上內存中的所有用戶的票證。
Mimikatz 的 “kerberos::tickets” 命令可以轉儲當前已登陸的用戶的 Kerberos 票證并且不需要權限提升。利用 SEKURLSA 模塊的功能,可以讀取被保護的內存(LSASS),在系統中的所有的 Kerberos 票證均可以轉儲。
命令:mimikatz sekurlsa::tickets exit
下圖顯示了轉儲另外一個域管理員(LukeSkywalker)的密碼和Kerberos票證(TGS 和 TGT)。
下圖顯示了轉儲另外一個域管理員(HanSolo)的密碼和Kerberos票證(TGS 和 TGT)。
下圖顯示了轉儲一個 SQL 服務帳戶(svc-SQLDBEngine01)的密碼和Kerberos票證(TGS 和 TGT)。
SEKURLSA::Trust – 獲取信任密鑰
(我認為此命令已過時,可以使用 lsadump::trust /patch)
SEKURLSA::TSPKG - 列出 TsPkg 憑證。
SEKURLSA::Wdiget - 列出 Wdiget 憑證。
STANDARD::Base64 – 轉換輸出到 Base64 輸出
STANDARD::CD – 改變或顯示當前文件夾
STANDARD::CLS – 清屏
STANDARD::Exit – 退出 Mimikatz
STANDARD::Log – 記錄 Mimikatz 數據到日志文件中
STANDARD::Sleep – 指定毫秒級的延時
STANDARD::Version – 顯示版本信息
Mimikatz 的 Token 模塊能夠與 Windows 身份驗證令牌進行交互,包括抓取,偽造假冒的已存在的令牌。
TOKEN::Elevate – 假冒令牌。用于提升權限至 SYSTEM 權限(默認)或者使用 Windows API 找到域管理員令牌。
需要管理員權限。
找到一個域管理員憑證并且使用該域管理員的令牌:
token::elevate /domainadmin
TOKEN::List - 列出系統中所有的令牌
TOKEN::Revert - 恢復進程令牌
TOKEN::Whoami – 顯示當前身份信息
TS::Multirdp - (實驗) 補丁終端服務器服務允許多個用戶連接
VAULT::List - 列出 Vault 憑證
VAULT::Cred - cred
原文所有權歸 Sean Metcalf (ADSecurity.org) 所有
本文由 Her0in 翻譯并首發于烏云 drops,轉載請注明出處