0、背景
聆聽了n1nty大佬(90后黑客代表)的諄諄指導,學習了n1nty大佬的基本操作,決定總結一下,做一個簡要的讀書筆記,也把之前自己記錄的關於Windows的安全的一些博客能夠串聯起來。所以首先鳴謝:90后黑客代表n1nty大佬。
1、Kerberos的基本認證
1.1、NTLM的挑戰認證
不啰嗦,直接說要點,server接到client的請求認證后,會回復16字節隨機數據,也就是挑戰。client使用自己生成的賬號的NTLM的hash值對挑戰數據進行某種加密運算,發送到server,server對這一數據進行驗證,計算方法相同,比對一直即通過,否則不通過。這一段可以查閱之前博客Windows NTLM Hash和Hash傳遞、Key傳遞攻擊
1.2、Kerberos驗證
不啰嗦具體細節可以參考之前的博客Kerberos認證協議分析,這里有分三個步驟
1.2.1、第一步AS驗證
核心是:賬號口令的hash值加密時間戳(timestamp),記憶賬號身份信息給AS服務器(KDC的一部分,KDC是DC的一部分,DC是域控,對應的數據庫是AD),AS服務器解密時間戳,核對在五分鍾以內,且不是重放,則返回TGT和Session-Key。在Wireshark中,Session-KEY是外側的enc-part數據,Session-Key由password的hash值加密后,生成新的enc-part數據,存在TGT里面。
1.2.1.1、域內用戶枚舉攻擊:
一張圖解決問題,發送AS-REQ,根據AS-REP來判斷問題:

1.2.1.2、TGT Session Key離線爆破
一段話解決問題:session-key經過hash加密成為tgt的一部分,拿到tgt后可以嘗試離線暴力破解hash的明文,與NTLM的爆破原理一致,明文字典經過hash計算形成hash值,然后嘗試加密session-key與tgt的session-key對應,一致,則爆破成功。
1.2.1.3、PtK(Pass the Key)攻擊
在AS-REQ中時間戳經過NT hash或者賬號的AES128(AES256)的加密,形成加密數據,你可以通過如下方式獲取:

server端會依照解密,驗證時間戳。獲取Key之后可以傳遞這個Key,獲取TGT。
1.2.2、第二步TGS驗證
核心是:client給server發送使用使用krbtgt的口令hash加密的TGT和加密的session-key,server端使用krbtgt的口令hash值解密TGT獲取加密的session-key與外部加密的session-key進行比較,一致,就返回訪問服務使用的普通ticket和新的session-key,否則驗證失敗。
1.2.2.1、Golden Ticket
使用方法和原理請參見之前博客黃金票據(Golden Ticket)的原理與實踐,總結一句話:TGT的偽造很簡單,只需要sid,session-key加密所需要的key(NT-hash、AES256KEY、AES128KEY)即可,域名、username即可。session-key的原始值是隨機值,可以任意偽造,加密后兩個加密的session-key一致即可通過。
1.2.3、第三步AP驗證
原理與TGS相同,驗證普通ticket中的session-key與新的session-key是否一致。
1.2.3.1、Sliver Ticket
與Golden Ticket的原理一致,不同的是加密的是service ticket(普通ticket),使用的服務啟動賬號的口令hash值而不是krbtgt的賬號的口令的hash值,所以只能訪問該賬號啟動的服務,而不是全域服務。
2、委派
2.1.1 無限制委派
緩存各個賬戶的TGT進行代理驗證,危險。
2.2.2 受限制委派
涉及S4U2Self和S4U2Proxy協議,暫不贅述。
