分析kerberos请求第一阶段,以下是基于impacket请求发出的数据包进行分析。其他工具可能有所差异,但问题不大。

impacket-getTGT yunwei.lab/jm:123.com -dc-ip 20.0.0.100

在impacket中,一共会发送两次AS Req包。

AS-1

第一次:协商

第一次为协商请求包,这个数据包的功能有两个:

  1. 服务器和客户端协商加密协议(etype.ENCTYPE),如果不支持则继续协商。
  2. 其次判断用户名是否存在(cname.cname-string.CNameString)。

上述条件都满足后,会进入下一阶段:身份验证

协商包里面只有用户名。服务器会去判断请求的用户名是否存在,如果不存在则不再进行后续操作。

AS-2

其他字段的信息:realm指的是域控的域名。nonce是随机生成的数

第二次:身份认证

这个请求中不会直接发送密码hash给服务器,而是发送一个用密码加密的时间戳(padata-type: pA-ENC-TIMESTAMP)给服务器。服务器收到请求后会使用用户名对应的密码解密时间戳。

AS-3

如果时间戳在一定范围内,则认证成功,服务器返回TGT票据(ticket)和Session Key(etc-part.cipher)。

  • TGT票据使用krbtgt账户的密码hash进行加密,TGT票据中包含PAC。PAC又包含 Client SID + Client Group。
  • Session Key使用(CNameString)用户名对应的密码进行加密,作为下阶段认证密钥。但是,服务器不会存储Session Key。

AS-4