Kerberos协议之AS_REQ & AS_REP
Kerberos是一种由MIT(麻省理工大学)提出的一种网络身份验证协议。
# 简述Kerberos
Kerberos是一种由MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。
在Kerberos协议中主要是有三个角色的存在:
- 访问服务的Client(以下表述为Client 或者用户)
- 提供服务的Server(以下表述为服务)
- KDC(Key Distribution Center)密钥分发中心 kerberos 测试工具介绍
其中KDC服务默认会安装在一个域的域控中,而Client和Server为域内的用户或者是服务,如HTTP服务,SQL服务。在Kerberos中Client是否有权限访问Server端的服务由KDC发放的票据来决定。
kerberos的简化认证认证过程如下图
- AS_REQ: Client向KDC发起AS_REQ,请求凭据是Client hash加密的时间戳
- AS_REP: KDC使用Client hash进行解密,如果结果正确就返回用krbtgt hash加密的TGT票据,TGT里面包含PAC,PAC包含Client的sid,Client所在的组。
- TGS_REQ: Client凭借TGT票据向KDC发起针对特定服务的TGS_REQ请求
- TGS_REP: KDC使用krbtgt hash进行解密,如果结果正确,就返回用服务hash 加密的TGS票据(这一步不管用户有没有访问服务的权限,只要TGT正确,就返回TGS票据)
- AP_REQ: Client拿着TGS票据去请求服务
- AP_REP: 服务使用自己的hash解密TGS票据。如果解密正确,就拿着PAC去KDC那边问Client有没有访问权限,域控解密PAC。获取Client的sid,以及所在的组,再根据该服务的ACL,判断Client是否有访问服务的权限。
本文注重前两个
# AS_REQ
用daiker师傅的工具来发Kerberos包。
配置域账户
勾上PAPAC_REQUEST
、ENCTIMESTAMP
、etypes
里的rc4hmac
加密。发包
抓包可见两个请求包AS-REQ AS-REP
AS-REQ中各个字段
- pvno Kerberos版本
- msg-type Kerberos类型 0x0a对应krb-as-req
- padata 存放了PA-ENC-TIMESTAMP和PA-PAC-REQUEST 3.1 PA-ENC-TIMESTAMP是预认证,使用用户hash加密时间戳,AS存放了用户的hash,AS用用户hash解密获得时间戳。如果时间戳在某一个时间则认证成功。 3.2 PA-PAC-REQUEST是微软引入的PAC拓展,include-pac=true,KDC会根据include的值来判断返回的票据中是否携带PAC。
- req-body
4.1 cname
PrincipalName 类型。PrincipalName包含type和value。
KRB_NT_PRINCIPAL = 1 意思是只用用户名就行,比如[email protected]
这个域用户,只需要填admin
KRB_NT_SRV_INST = 2 service and other unique instance (krbtgt) 这个一般指服务账户名
KRB_NT_ENTERPRISE_PRINCIPAL = 10 [email protected]
用户全称。
4.2 sname PrincipalName 类型 在AS_REQ里面sname是krbtgt,类型是KRB_NT_SRV_INST
4.3 till 到期时间
4.4 nonce 随机数
4.5 etype hash加密类型
# AS-REP
KDC使用用户hash解密,如果结果正确返回用krbtgt hash加密的TGT票据。
各个字段的含义
- msg-type krb-as-rep 对应的是0x0b
- crealm 域名
- cname 用户类型和用户名
- ticket tgt票据 这里存在黄金票据的问题,因为返回的tgt是通过krbtgt的hash加密的,如果知道krbtgt的hash,则可以伪造任意用户。
- enc-part 这部分可以用daiker师傅的工具解密。key是用户hash,解密后得到Encryptionkey。
# 参考
- https://daiker.gitbook.io/windows-protocol/kerberos/1
- https://github.com/daikerSec/windows_protocol/tree/master/tools
吹爆daiker师傅
文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。
如果你觉得这篇文章对你有所帮助,欢迎赞赏或关注微信公众号~