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

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

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