TGS_REQ & TGS_REP
这篇文章是kerberos篇的第二篇TGS_REQ& TGS_REP。在TGS_REQ & TGS_REP阶段,用户通过AS_REP拿到的TGT票据,去向KDC申请特定服务的访问权限,KDC校验TGT票据,如果校验通过的话,会向用户发送一个TGS票据,之后用户再拿着TGS去访问特定的服务。这一阶段,微软引进了两个扩展S4U2SELF和S4U2PROXY。考虑到这两个扩展是TGS的子协议,把S4U归纳到这篇文章里面一起讲。
TGS_REQ这个阶段不需要账号密码,需要AS_REP获取到的TGT凭据。这里面工具需要指定域控的地址。连接配置里面的其他信息都在凭据里面,这里可以不用指定。

image-20191106182220591

image-20191107134013287
这里面标注的字段是跟AS_REQ里面不一样的,在AS_REQ文档有标注,一样的内容就不再标注了。
类型,TGS_REQ对应的就是KRB_TGS_REQ(0x0c)
正常的TGS_REQ的请求需要用到有
- AP_REQ

image-20191108121353162
这个是TGS_REQ必须携带的部分,这部分会携带AS_REP里面获取到的TGT票据,就放在这个结构体里面。
KDC校验TGT票据,如果票据正确,就返回TGS票据。
- PA_FOR_USER

image-20191108121233996
类型是S4U2SELF
值是一个唯一的标识符,该标识符指示用户的身份。该唯一标识符由用户名和域名组成。
S4U2proxy 必须扩展PA_FOR_USER结构,指定服务代表某个用户(图片里面是administrator)去请求针对服务自身的kerberos服务票据。
- PA_PAC_OPTIONS

image-20191108121209924
类型是 PA_PAC_OPTIONS
值是以下flag的组合
-- Claims(0)
-- Branch Aware(1)
-- Forward to Full DC(2)
-- Resource-based Constrained Delegation (3)
如果是基于资源的约束委派,就需要指定Resource-based Constrained Delegation位。
- sname这个是要请求的服务,TGS_REP获得的ticket是用该服务用户的hash进行加密的。有个比较有意思的特性是,如果指定的服务是krbtgt,那么拿到的TGS票据是可以当做TGT票据用的。
- AddtionTicket