分析kerberos请求第一阶段,以下是基于impacket请求发出的数据包进行分析。其他工具可能有所差异,但问题不大。
impacket-getTGT yunwei.lab/jm:123.com -dc-ip 20.0.0.100
在impacket中,一共会发送两次AS Req包。
第一次:协商
第一次为协商请求包,这个数据包的功能有两个:
- 服务器和客户端协商加密协议(
etype.ENCTYPE
),如果不支持则继续协商。 - 其次判断用户名是否存在(
cname.cname-string.CNameString
)。
上述条件都满足后,会进入下一阶段:身份验证
协商包里面只有用户名。服务器会去判断请求的用户名是否存在,如果不存在则不再进行后续操作。
其他字段的信息:realm
指的是域控的域名。nonce
是随机生成的数
第二次:身份认证
这个请求中不会直接发送密码hash给服务器,而是发送一个用密码加密的时间戳(padata-type: pA-ENC-TIMESTAMP
)给服务器。服务器收到请求后会使用用户名对应的密码解密时间戳。
如果时间戳在一定范围内,则认证成功,服务器返回TGT票据(ticket
)和Session Key(etc-part.cipher
)。
- TGT票据使用
krbtgt
账户的密码hash进行加密,TGT票据
中包含PAC。PAC又包含 Client SID + Client Group。 - Session Key使用(
CNameString
)用户名对应的密码进行加密,作为下阶段认证密钥。但是,服务器不会存储Session Key。