域滲透基礎(chǔ)—NTLM協(xié)議與Kerberos協(xié)議
一、NTLM協(xié)議
1、NTLM簡介
NTLM使用在Windows NT和Windows 2000 Server(or later)工作組環(huán)境中(Kerberos用在域模式下)。在AD域環(huán)境中,如果需要認(rèn)證Windows NT系統(tǒng),也必須采用NTLM。較之Kerberos,基于NTLM的認(rèn)證過程要簡單很多。NTLM采用一種質(zhì)詢/應(yīng)答(Challenge/Response)消息交換模式。
在本地登錄Windows的情況下,操作系統(tǒng)會使用用戶輸入的密碼作為憑證去與系統(tǒng)中的密碼進(jìn)行驗(yàn)證,操作系統(tǒng)中的密碼存儲在
%SystemRoot%\system32\config\sam

2、LM Hash & NTLM Hash
windows內(nèi)部是不保存明文密碼的,只保存密碼的hash。
其中本機(jī)用戶的密碼hash是放在本地的SAM文件 里面,域內(nèi)用戶的密碼hash是存在域控的NTDS.DIT文件 里面。
在Windows系統(tǒng)導(dǎo)出密碼的時(shí)候,經(jīng)常看到這樣的密碼格式
Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0:::
其中的AAD3B435B51404EEAAD3B435B51404EE是LM Hash
31D6CFE0D16AE931B73C59D7E0C089C0是NTLM Hash
LM Hash的計(jì)算:
①用戶的密碼轉(zhuǎn)換為大寫,密碼轉(zhuǎn)換為16進(jìn)制字符串,不足14字節(jié)將會用0來再后面補(bǔ)全。
②密碼的16進(jìn)制字符串被分成兩個(gè)7byte部分。每部分轉(zhuǎn)換成比特流,并且長度位56bit,長度不足使用0在左邊補(bǔ)齊長度。
③再分7bit為一組,每組末尾加0,再組成一組。
④上步驟得到的二組,分別作為key 為 “KGS!@#$%”進(jìn)行DES加密。
⑤將加密后的兩組拼接在一起,得到最終LM HASH值。
注:如果密碼強(qiáng)度是小于7位,那么第二個(gè)分組加密后的結(jié)果肯定是aad3b435b51404ee
NTLM Hash的計(jì)算
①.先將用戶密碼轉(zhuǎn)換為十六進(jìn)制格式。
②.將十六進(jìn)制格式的密碼進(jìn)行Unicode編碼。
③.使用MD4摘要算法對Unicode編碼數(shù)據(jù)進(jìn)行Hash計(jì)算。
從Windows Vista 和 Windows Server 2008開始,默認(rèn)情況下只存儲NTLM Hash,LM Hash將不再存在。(因此后面我們介紹身份認(rèn)證的時(shí)候只介紹Net-ntlm,不再介紹net-lm)如果空密碼或者不儲蓄LM Hash的話,我們抓到的LM Hash是AAD3B435B51404EEAAD3B435B51404EE。
所以在win7 中我們看到抓到LM Hash都是AAD3B435B51404EEAAD3B435B51404EE,這里的LM Hash并沒有價(jià)值。
3、NTLM驗(yàn)證

NTLM驗(yàn)證是一種Challenge/Response 驗(yàn)證機(jī)制,由三種消息組成:通常稱為type 1(協(xié)商),類型type 2(質(zhì)詢)和type 3(身份驗(yàn)證)。
①用戶登錄客戶端電腦。
②(type 1)客戶端向服務(wù)器發(fā)送type 1(協(xié)商)消息,它主要包含客戶端支持和服務(wù)器請求的功能列表。
③(type 2)服務(wù)器用type 2消息(質(zhì)詢)進(jìn)行響應(yīng),這包含服務(wù)器支持和同意的功能列表。但是,最重要的是,它包含服務(wù)器產(chǎn)生的Challenge。
④(type 3)客戶端用type 3消息(身份驗(yàn)證)回復(fù)質(zhì)詢。用戶接收到步驟3中的challenge之后,使用用戶hash與challenge進(jìn)行加密運(yùn)算得到response,將response,username,challeng發(fā)給服務(wù)器。消息中的response是最關(guān)鍵的部分,因?yàn)樗鼈兿蚍?wù)器證明客戶端用戶已經(jīng)知道帳戶密碼。
⑤服務(wù)器拿到type 3之后,使用challenge和用戶hash進(jìn)行加密得到response2與type 3發(fā)來的response進(jìn)行比較。如果用戶hash是存儲在域控里面的話,那么沒有用戶hash,也就沒辦法計(jì)算response2。也就沒法驗(yàn)證。這個(gè)時(shí)候用戶服務(wù)器就會通過netlogon協(xié)議聯(lián)系域控,建立一個(gè)安全通道,然后將type 1,type 2,type3 全部發(fā)給域控(這個(gè)過程也叫作Pass Through Authentication認(rèn)證流程)
⑥域控使用challenge和用戶hash進(jìn)行加密得到response2,與type 3的response進(jìn)行比較。
4、哈希傳遞攻擊(PTH)
哈希傳遞(Pass The Hash)攻擊簡稱 PTH,該方法通過找到與賬戶相關(guān)的密碼散列值(NTLM Hash)來進(jìn)行攻擊。由于在 Windows 系統(tǒng) NTLM 認(rèn)證的 TYPE 3 消息計(jì)算 Response 的時(shí)候,客戶端是使用用戶的 NTLM Hash 進(jìn)行計(jì)算的,而不是用戶密碼進(jìn)行計(jì)算的。因此在模擬用戶登錄或?qū)υL問資源的用戶進(jìn)行身份認(rèn)證的時(shí)候,是不需要用戶明文密碼的,只需要用戶 Hash。攻擊者可以利用 NTLM HASH 直接遠(yuǎn)程登錄目標(biāo)主機(jī)或反彈 Shell。
在域環(huán)境中,用戶登錄計(jì)算機(jī)時(shí)一般使用域賬號,大量計(jì)算機(jī)在安裝時(shí)會使用相同的本地管理員賬號和密碼,因此,如果計(jì)算機(jī)的本地管理員賬號和密碼也相同,攻擊者就能使用哈希傳遞攻擊的方法來登錄內(nèi)網(wǎng)中的其他主機(jī)。使用該方法,攻擊者不需要花費(fèi)時(shí)間來對 Hash 進(jìn)行爆破,在內(nèi)網(wǎng)滲透里非常經(jīng)典。常常適用于域環(huán)境或工作組環(huán)境。
5、總結(jié)
NTLM是windows早期安全協(xié)議,因向后兼容性而保留下來,而后還有V2版本,與其最大的不同是challenge加密算法不一樣,驗(yàn)證方式基本相同;
二、Kerberos 協(xié)議
1、簡介
Kerberos 是一種由 MIT(麻省理工大學(xué))提出的一種網(wǎng)絡(luò)身份驗(yàn)證協(xié)議。它旨在通過使用密鑰加密技術(shù)為客戶端/服務(wù)器應(yīng)用程序提供強(qiáng)身份驗(yàn)證。Kerberos 主要是用在域環(huán)境下的身份認(rèn)證協(xié)議。
2、kerberos 認(rèn)證流程
① client向kerberos服務(wù)請求,希望獲取訪問server的權(quán)限。 kerberos得到了這個(gè)消息,首先得判斷client是否是可信賴的, 也就是白名單黑名單的說法。這就是AS服務(wù)完成的工作,通過 在AD中存儲黑名單和白名單來區(qū)分client。成功后,返回AS返 回TGT給client。
②client得到了TGT后,繼續(xù)向kerberos請求,希望獲取訪問 server的權(quán)限。kerberos又得到了這個(gè)消息,這時(shí)候通過client 消息中的TGT,判斷出了client擁有了這個(gè)權(quán)限,給了client訪 問server的權(quán)限ticket。
[圖片上傳失敗...(image-81ff46-1630390495796)]
③client得到ticket后,終于可以成功訪問server。這個(gè)ticket只是 針對這個(gè)server,其他server需要向TGS申請。
3、SPN定義
服務(wù)主體名稱(SPN)是Kerberos客戶端用于唯一標(biāo)識給特定Kerberos目標(biāo)計(jì)算機(jī)的服務(wù)實(shí)例名稱。Kerberos身份驗(yàn)證使用SPN將服務(wù)實(shí)例與服務(wù)登錄帳戶相關(guān)聯(lián)。如果在整個(gè)林中的計(jì)算機(jī)上安裝多個(gè)服務(wù)實(shí)例,則每個(gè)實(shí)例都必須具有自己的SPN。如果客戶端可能使用多個(gè)名稱進(jìn)行身份驗(yàn)證,則給定的服務(wù)實(shí)例可以具有多個(gè)SPN。例如,SPN總是包含運(yùn)行服務(wù)實(shí)例的主機(jī)名稱,所以服務(wù)實(shí)例可以為其主機(jī)的每個(gè)名稱或別名注冊一個(gè)SPN。
4、SPN掃描
spn掃描也可以叫掃描Kerberos服務(wù)實(shí)例名稱,在Active Directory環(huán)境中發(fā)現(xiàn)服務(wù)的最佳方法是通過“SPN掃描”。通過請求特定SPN類型的服務(wù)主體名稱來查找服務(wù),SPN掃描攻擊者通過網(wǎng)絡(luò)端口掃描的主要好處是SPN掃描不需要連接到網(wǎng)絡(luò)上的每個(gè)IP來檢查服務(wù)端口。SPN掃描通過LDAP查詢向域控制器執(zhí)行服務(wù)發(fā)現(xiàn)。由于SPN查詢是普通Kerberos票據(jù)的一部分,因此如果不能被查詢,但可以用網(wǎng)絡(luò)端口掃描來確認(rèn)。
5、Kerberoast攻擊簡述
利用SPN的Kerberoast攻擊,即破解Kerberos服務(wù)票據(jù)并重寫,從而獲得目標(biāo)服務(wù)的訪問權(quán)限(過程中是合法訪問、離線破解服務(wù)票據(jù),而完全不需要與服務(wù)目標(biāo)有任何交互行為)
選擇域用戶下注冊的SPN,為這個(gè)服務(wù)請求票據(jù),導(dǎo)出票據(jù)后進(jìn)行破解,然后重寫票據(jù),可以造成身份偽造或提權(quán)。