内网认证-kerberos
krbtgt用户:这个用户是创建域时系统自动创建的一个账户,它是KDC的服务账户,其密码是系统随机创建,该账户无法正常登录主机。
身份认证请求
1.Client向域控发起身份认证请求,请求包含了用户名。域控的KDC的AS查询AD数据库,找到对应用户的NTLM HASH。
2.AS响应两个消息
Msg A:用该用户的NTLM HASH加密一个复杂的字符串作为CLIENT / TGS SESSIONKEY(这个CLIENT / TGS SESSIONKEY有两份,一份在Msg A给了CLIENT 一份给了TGS)
Msg B:使用TGS密钥加密的TGT,TGS密钥就是krbtgt的NTLM HASH。(客户端没有TGS密钥。所以其无法修改TGT)
TGT包含了:
CLIENT / TGS SESSIONKEY
CLIENT ID
票据有效时间
CLIENT 地址
3.Client收到AS的响应,使用自己的NTLM HASH(Client KEY)解密Msg A得到CLIENT / TGS SESSIONKEY的明文。
在用户登录时,机器会根据其输入的密码生成NTLM HASH,如果输入密码正确,那么这里CLIENT的NTLM HASH和域控的AS用来加密CLIENT / TGS SESSIONKEY的NTLM HASH是一样的。
服务授权请求
1.CLIENT请求访问某个服务,生成两个消息
Msg C:请求服务ID+之前收到的TGT
Msg D:使用CLIENT / TGS SESSIONKEY加密的身份认证信息(包括了CLIENT ID+时间范围)
2.KDC收到请求,先用krbtgt NTLM HASH解密TGT。得到CLIENT / TGS SESSIONKEY,再使用CLIENT / TGS SESSIONKEY解密Msg D。对比TGT和解密的Msg D中的CLIENT ID、有效时间。
3.对比一致则响应服务票据给CLIENT,响应包括:
Msg E:SERVICE密钥(服务器的NTLM HASH)加密的CLIENT-TO-SERVER TICKET(允许访问服务的票据)
CLIENT-TO-SERVER TICKET包括:
CLIENT / SERVER SESSIONKEY
CLIENT 地址
Ticket有效时间
CLIENT ID
Msg F:使用CLIENT / TGS SESSIONKEY加密的CLIENT / SERVER SESSIONKEY
4.上面说了CLIENT可以用自己的NTLM HASH解密得到CLIENT / TGS SESSIONKEY,所以这里可以用CLIENT / TGS SESSIONKEY解密得到CLIENT / SERVER SESSIONKEY。但是服务访问票据无法解密(因为没有SERVICE KEY,无法更改)
发送服务请求
1.CLIENT向SERVER发送的请求消息包括:
之前从域控那得到的Msg E
Msg G:CLIENT / SERVER SESSIONKEY加密的身份认证信息(包括CLIENT ID和时间范围)
2.SERVER收到请求后,先用SERVICE KEY解密Msg E得到CLIENT / SERVER SESSIONKEY,再用CLIENT / SERVER SESSIONKEY解密Msg G,对比解密Msg E和 Msg G中的到的CLIENT ID,如果一致则响应
3.SERVER响应:
Msg H:包含CLIENT / SERVER SESSIONKEY加密的时间范围
4.CLIENT使用CLIENT / SERVER SESSIONKEY解密Msg H,确保时间范围和之前发出去的Msg G中的时间范围一致。
从上述流程来看,获取了krbtgt的NTLM HASH就可以伪造TGT,修改里面的CLIENT / TGS SESSIONKEY,这样伪造的Msg D(也就是服务授权请求的身份认证信息)就可以骗过KDC,也就是伪造黄金票据。
而获取了SERVICE NTLM HASH就可以伪造CLIENT-TO-SERVER TICKET;并可以修改CLIENT / SERVICE SESSIONKEY,这样伪造的Msg G(也就是服务请求时的身份认证信息)就可以骗过SERVER,也就是伪造了白银票据。
学习自
https://ares-x.com/2020/03/17/域渗透学习(二)Kerberos协议/
标签:协议,HASH,TGS,kerberos,SERVER,SESSIONKEY,Msg,CLIENT From: https://www.cnblogs.com/q1stop/p/17937036