Kerberos协议之TGS_REQ & TGS_REP
继续Kerberos协议
# 接上文
前面解释了AS_REQ & AS_REP,在AS_REP中,kdc返回了使用krbtgt hash加密的tgt票据。在TGS_REQ & TGS_REP阶段,就是client拿着AS_REP获得的tgt票据去KDC换可以访问具体服务的tgs票据,然后再使用TGS票据去访问具体的服务。这一阶段,微软引进了两个扩展S4U2SELF和S4U2PROXY。
配置以下Kerberos发包工具。把AS_REP的票据导入,同样勾上RC4加密。
发包
# TGS_REQ
在TGS_REQ请求中需要ap-req字段
这部分包含了tgt里的信息,kdc以此校验tgt,正确则返回tgs票据。
PA_FOR_USER字段
类型是S4U2SELF,值是一个唯一的标识符,该标识符指示用户的身份。该唯一标识符由用户名和域名组成。
S4U2proxy 必须扩展PA_FOR_USER结构,指定服务代表某个用户(图片里面是administrator)去请求针对服务自身的kerberos服务票据。
PA_PAC_OPTIONS字段
类型是 PA_PAC_OPTIONS,值是以下flag的组合
- Claims(0)
- Branch Aware(1)
- Forward to Full DC(2)
- Resource-based Constrained Delegation (3)
微软的MS-SFU 2.2.5, S4U2proxy 必须扩展PA-PAC-OPTIONS结构。 如果是基于资源的约束委派,就需要指定Resource-based Constrained Delegation(RBCD)位。
req-body
sname指要请求的服务名,tgs的票据是由该服务用户的hash加密的。如果该服务名为krbtgt,那么tgs的票据可以当tgt用。
AddtionTicket:附加票据,在S4U2proxy请求里面,既需要正常的TGT,也需要S4U2self阶段获取到的TGS,那么这个TGS就添加到AddtionTicket里面。
# TGS_REP
ticket字段是tgs票据,用于下一步的AP_REQ认证。ticket中的enc_part是使用服务账户的hash加密的,如果有服务账户的hash,就可以自己签发一个给任意用户的tgs票据(白银票据)。
最后一个enc_part可以解密,其中的session_key用作下一阶段的认证密钥。
挖坑,S4U2SELF、S4U2PROXY和委派暂时放后面说。(等我看懂)
# 参考
文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。
如果你觉得这篇文章对你有所帮助,欢迎赞赏或关注微信公众号~