Kerberos协议分析(数据包)
角色组成
客户端(Client):发送请求一方
服务端 (Server):接收请求一方
KDC 密钥分发中心
- AS (Authorization Server) 认证服务器,用于认证客户端身份并发放客户用于访问TGS的TGT(票据授予票据)
- TGS (Ticket Grant Server) 票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据
认证过程
(认证过程部分内容使用的wanli师傅画的图片)
第一阶段
Client向KDC-AS发起req请求,当AS接收到请求后,返回一张TGT票据。
TGT票据的内容如下:
- 一部分为Client-hash加密的含CT_SK内容
- 一部分为krbtgt-hash加密的含CT_SK内容
Client接收到TGT票据后,使用Client-hash解密得出CT_SK值,再利用CT_SK加密产生新的TGT票据,并且传递给TGS。
(新)TGT票据的内容如下:
- 一部分为CT_SK加密的内容
- 一部分为krbtgt-hash加密的含CT_SK内容
第二阶段
当Client发送(新)TGT给TGS后,TGS利用krbtgt-hash值解密出CT_SK,并利用CT_SK加密出剩余部分,TGS返回一张ST票据给Client
ST票据内容如下:
- 一部分为CT_SK加密的含CS_SK内容
- 一部分为server-hash加密的含CS_SK内容(server-hash为选取的目标服务的hash值)
第三阶段
Client将接收到的ST票据重新解密封装,发送(新)ST给Server,Server使用本机的机器用户HASH值解密ST得到 CS_SK,进行对比后成功访问建立信任
(新)ST票据内容如下:
- 一部分为CS_SK加密的内容
- 一部分为server-hash加密的含CS_SK内容
数据包分析
第一阶段
获得TGT票据
AS-REQ
- PA-DATA pA-ENC-TIMESTAMP 使用用户的hash或者AES key加密的时间戳(可能导致PTH PTK攻击)
- kdc-options 协商字段
- cname 请求的用户名
- realm 域名
AS-REP
enc-part
第一个enc-part内容为:TGT中由Krbtgt hash加密
第二个enc-part内容为:TGT中由用户 hash加密
第二阶段
TGS-REQ:客户端发送给TGS数据包
TGS-REP:TGS发送给客户端数据包
申请ST票据
1 | tgs::ask /tgt:tgt票据路径 /service:cifs(服务名)/主机名.域 |
TGS-REQ
- ticket-enc-part:原本的TGT,使用krbtgt加密
- authenticator:使用CT_SK加密的内容
- cname:请求用户名
- realm:请求域名
- sname:请求服务名
TGS-RSP
- 第一个enc-part: 是请求服务的密钥加密内容
- 第二个enc-part:CT_SK加密内容
第三阶段
AP-REQ
登录god\dyh域普通账户,通过该账户构建Administrator账户票据访问域控,域控机器名(owa.god.org)
1 | klist //清空票据 |
1 | tgs::ask /tgt:tgt票据路径 /service:cifs(服务名)/主机名.域 /tt 生成tgs票据并注入内存 |
可见成功生成票据
成功访问到域控目录
客户端发送到服务端的数据包
- ticker中cipher:使用server hash加密内容
- authenticator:CS_SK加密内容
AP-REP
包含类客户端验证服务端的信息
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Drblack'Blog!