內網滲透—WINDOWS認證機制之NTLM
域滲透就是基于windows域環境的滲透,而域滲透涉及到的技術,如哈希傳遞(PTH)票據傳遞(PTT)委派攻擊等,都是基于域環境下的認證機制來實現的,這也是為什么要了解Windows認證機制的原因之一Windows的認證包括三個部分,用戶直接操作計算機登陸賬戶(本地認證),遠程連接到工作組中的某個設備(網絡認證),登陸到域環境中的某個設備(域認證)

本地認證 NTLM
本地認證十分簡單:用戶輸入密碼,系統收到密碼后將用戶輸入的密碼計算成NTLM Hash,然后與sam數據庫(%SystemRoot%\system32\config\sam)中該用戶的哈希比對,匹配則登陸成功,不匹配則登陸失敗
NTLM哈希是一種單向哈希算法,Windows將用戶的密碼計算成NTLM哈希之后才存儲在電腦中
大致的運算流程為:
用戶密碼->HEX編碼->Unicode編碼->MD4
本地認證中用來處理用戶輸入密碼的進程即lsass.exe,密碼會在這個進程中明文保存,供該進程將密碼計算成NTLM Hash與sam進行比對
在滲透測試中,通常可從Windows系統中的SAM文件和域控的NTDS.dit文件中獲得所有用戶的hash,通過Mimikatz讀取lsass.exe進程能獲得已登錄用戶的NTLM hash
網絡認證 Net NTLM
網絡認證即在工作組環境下遠程登陸另一臺電腦所采用的認證機制
Net NTLM的認證過程分為三步,也叫挑戰響應機制:
- 協商
- 質詢
- 驗證
協商:雙方確定使用的協議版本,在NTLM認證中,NTLM響應分為NTLM v1,NTLMv2,NTLM session v2三種協議,不同協議使用不同格式的Challenge和加密算法
所以也就存在不同協議的Net-NTLM hash,即Net-NTLM v1 hash,Net-NTLM v2 hash
質詢:挑戰(Chalenge)/響應(Response)認證機制的核心
1.客戶端向服務器端發送用戶信息(用戶名)請求
2.服務器接受到請求后,判斷本地用戶列表是否存在客戶端發送的用戶名,如果沒有返回認證失敗,如果有,生成一個16位的隨機數,被稱之為“Challenge”, 然后使用登錄用戶名對應的NTLM Hash加密Challenge(16位隨機字符), 生成Challenge1保存在內存中。同時,生成Challenge1后,將Challenge(16位隨機字符)發送給客戶端。
3.客戶端接受到Challenge后,使用自己提供的賬戶的密碼轉換成對應的NTLM Hash,然后使用這個NTLM Hash加密Challenge生成Response,然后將Response發送至服務器端。
驗證:在質詢完成后,驗證結果,是認證的最后一步。

服務端收到客戶端發送的Response后,與之前保存在內存中的Challenge比較,如果相等認證通過
其中,經過NTLM Hash加密Challenge的結果在網絡協議中稱之為Net NTLM Hash(不能直接用來進行哈希傳遞攻擊,但可以通過暴力破解來獲取明文密碼)
實際測試
- 遠程機器:192.168.217.129
- 用戶名:administrator
- 密碼:hongrisec@2020
- 本地:192.168.217.1
> net use \\192.168.217.129 /u:administrator hongrisec@2020 The command completed successfully.
抓包發現前4個包是協商協議版本,從smb轉為smbv2
本地發送質詢包,遠程機器響應攜帶Ntlm Server Challenge為
8f69a97378430a53

查看本地發送的第二個質詢包,加密后的challenge為
0822a40326fd8eab

Response數據為
fafc5895fbeff4fb303acf5c74b1424d01010000000000006727da877d95d6010822a40326fd8eab000000000200060047004f00440001000800530054005500310004000e0067006f0064002e006f00720067000300180073007400750031002e0067006f0064002e006f007200670005000e0067006f0064002e006f0072006700070008006727da877d95d60106000400020000000800300030000000000000000100000000200000bebc059df5e1e64f315030ef88a55e04436ab8b916550a10918f2f854dc9144b0a001000000000000000000000000000000000000900280063006900660073002f003100390032002e003100360038002e003200310037002e003100320039000000000000000000
下面,使用Hashcat對該Net-NTLM hash進行破解
NTLMv2的格式為:
username::domain:challenge:HMAC-MD5:blob 注: challenge為NTLM Server Challenge,domian由數據包內容獲得(IP或者機器名) HMAC-MD5對應數據包中的NTProofStr
構造的數據如下:
administrator::god.org:8f69a97378430a53:fafc5895fbeff4fb303acf5c74b1424d:01010000000000006727da877d95d6010822a40326fd8eab000000000200060047004f00440001000800530054005500310004000e0067006f0064002e006f00720067000300180073007400750031002e0067006f0064002e006f007200670005000e0067006f0064002e006f0072006700070008006727da877d95d60106000400020000000800300030000000000000000100000000200000bebc059df5e1e64f315030ef88a55e04436ab8b916550a10918f2f854dc9144b0a001000000000000000000000000000000000000900280063006900660073002f003100390032002e003100360038002e003200310037002e003100320039000000000000000000
新建字典添加hongrisec@2020
Hashcat參數如下:
hashcat -m 5600 administrator::god.org:8f69a97378430a53:fafc5895fbeff4fb303acf5c74b1424d:01010000000000006727da877d95d6010822a40326fd8eab000000000200060047004f00440001000800530054005500310004000e0067006f0064002e006f00720067000300180073007400750031002e0067006f0064002e006f007200670005000e0067006f0064002e006f0072006700070008006727da877d95d60106000400020000000800300030000000000000000100000000200000bebc059df5e1e64f315030ef88a55e04436ab8b916550a10918f2f854dc9144b0a001000000000000000000000000000000000000900280063006900660073002f003100390032002e003100360038002e003200310037002e003100320039000000000000000000 password.list -o result.txt --force
說明:
-m:hash-type,5600對應NetNTLMv2,詳細參數可查表:https://hashcat.net/wiki/doku.php?
-o:輸出文件 字典文件為password.list
–force代表強制執行,測試系統不支持Intel OpenCL
成功破解出登錄的明文密碼,輸出如下圖

成功破解出密碼hongrisec@2020
工作組環境和域環境下Net NTLM認證過程因為有DC(域控制器)的參與流程略有差異,不過不影響進行哈希傳遞攻擊