三步輕松理解Kerberos協(xié)議
本文轉(zhuǎn)載自微信公眾號「Bypass」,作者Bypass。轉(zhuǎn)載本文請聯(lián)系Bypass公眾號。
Kerberos是一種身份驗(yàn)證協(xié)議,它作為一種可信任的第三方認(rèn)證服務(wù),通過使用對稱加密技術(shù)為客戶端/服務(wù)器應(yīng)用程序提供強(qiáng)身份驗(yàn)證。在域環(huán)境下,AD域使用Kerberos協(xié)議進(jìn)行驗(yàn)證,熟悉和掌握Kerberos協(xié)議是學(xué)習(xí)域滲透的基礎(chǔ)。
Kerberos協(xié)議中主要的三個角色:
- 1.訪問服務(wù)的Client
- 2.提供服務(wù)的Server
- 3.KDC:密鑰分發(fā)中心,默認(rèn)安裝在域控上
- AS:身份驗(yàn)證服務(wù)
- TGS:票證授予服務(wù)
Kerberos協(xié)議認(rèn)證過程:
協(xié)議可以分為三個步驟:一是獲得票據(jù)許可票據(jù),二是獲取服務(wù)許可票據(jù),三是獲得服務(wù)。
第一步:獲得票據(jù)許可票據(jù)
KRB_AS_REQ:用于向KDC請求TGT
當(dāng)用戶在客戶端輸入域用戶和密碼時,客戶端將用戶密碼轉(zhuǎn)換為hash作為加密密鑰,對時間戳進(jìn)行加密作為請求憑據(jù)。
cipher:加密的時間戳,即客戶端的當(dāng)前時間與用戶的hash加密后的結(jié)果
KRB_AS_REQ 數(shù)據(jù)包如下:
KRB_AS_REP:用于通過KDC傳遞TGT
收到請求后,KDC從AD域數(shù)據(jù)庫中找到對用用戶的hash解密時間戳來驗(yàn)證用戶身份。如果時間戳在允許的時間范圍內(nèi),那么它就會生成一個會話密鑰(Session key),以AS_REP 數(shù)據(jù)包進(jìn)行響應(yīng)。
AS_REP 包含信息:
- ticket:使用krbtgt hash加密,包含用戶名/會話密鑰和到期時間等信息.
- enc-part:使用用戶hash加密,包含會話密鑰/TGT到期時間和隨機(jī)數(shù)(防重放)
KRB_AS_REP數(shù)據(jù)包如下:
第二步:獲得服務(wù)許可票據(jù)
KRB_TGS_REQ:使用TGT向KDC請求TGS
客戶端獲得TGT和用戶密鑰加密的enc-part,使用用戶hash解密enc-part獲得會話密鑰(Session key),然后使用會話密鑰將用戶名/時間戳進(jìn)行加密,生成authenticator和TGT發(fā)送給TGS。
- ticket:實(shí)質(zhì)上就是一張TGT,客戶端沒有 krbtgt hash,故無法解密TGT.
KRB_TGS_REQ 數(shù)據(jù)包如下:

KRB_TGS_REP:通過KDC傳遞TGS
TGS 收到KRB_TGS_REQ請求后,使用 krbtgt hash解密ticket 獲取會話密鑰(Session key),然后使用會話密鑰解密 authenticator 獲取用戶名和時間戳進(jìn)行身份驗(yàn)證。確認(rèn)信息后,創(chuàng)建一個服務(wù)會話密鑰(Service Session key)。
ticket:使用對應(yīng)的服務(wù)密鑰進(jìn)行加密,包含服務(wù)會話密鑰/用戶名/到期時間等信息,本質(zhì)上就是一張ST(Service Ticket)。enc-part:包含使用會話密鑰加密的服務(wù)會話密鑰(Service Session key)
- ticket:使用對應(yīng)的服務(wù)密鑰進(jìn)行加密,包含服務(wù)會話密鑰/用戶名/到期時間等信息,本質(zhì)上就是一張ST(Service Ticket)。
- enc-part:包含使用會話密鑰加密的服務(wù)會話密鑰(Service Session key)
KRB_TGS_REP數(shù)據(jù)包如下:

第三步:獲得服務(wù)
KRB_AP_REQ:使用TGS,服務(wù)對用戶身份驗(yàn)證
客戶端已經(jīng)擁有了有效的TGS可以與服務(wù)進(jìn)行交互,使用會話密鑰解密 enc-part,得到 服務(wù)會話密鑰(Service Session key),將用戶名/時間戳等信息使用服務(wù)會話密鑰(Service Session key)進(jìn)行加密,得到新的Authentication。
KRB_AP_REP:由服務(wù)用來針對用戶標(biāo)識自身
服務(wù)端接收到請求,使用自己的hash解密TGS獲得服務(wù)會話密鑰(Service Session key)和授權(quán)用戶信息,然后使用服務(wù)會話密鑰解密Authentication,比對用戶名和時間戳等信息,如果有相互驗(yàn)證標(biāo)記,服務(wù)端使用服務(wù)會話密鑰加密時間戳發(fā)給客戶端,客戶端解密時間戳驗(yàn)證服務(wù)端,然后開始請求服務(wù)。