【内网渗透】Windows-Kerberos基础

简单学习总结一下Kerberos协议

基本的Kerberos协议

参考:

https://zh.wikipedia.org/wiki/Kerberos

https://seevae.github.io/2020/09/12/%E8%AF%A6%E8%A7%A3kerberos%E8%AE%A4%E8%AF%81%E6%B5%81%E7%A8%8B/

时序图:

kerberos6

Windows下的Kerbos协议

windows下的Kerberos协议和基本的Kerberos协议总体流程大致相同,但细节上有所不同

参考:https://daiker.gitbook.io/windows-protocol/kerberos/1

AS认证

该过程主要分为两步,分别是用户向AS发送认证请求,AS响应请求

用户请求(AS_REQ):用户使用自己的Hash加密(对称)当前时戳,组包发送

AS响应(AS_REP):AS使用数据库中该用户的Hash进行解密,用户有效、时戳合理则返回KRBTGT Hash加密的TGT票据

产生的安全问题:

  • 黄金票据:如果普通用户知道了KRBTGT Hash,则可以签发任意用户的TGT票据(黄金票据)。
  • 哈希传递PTH, pass the hash):请求是使用的用户Hash加密时戳,所以即使不知道明文密码,通过用户Hash也能伪造用户身份

TGS认证

该过程仍是两步,分别为用户向TGS发送TGT,TGS验证TGT的合法性再返回服务Hash加密的数据

用户请求(TGS_REQ):TGT票据放在PA-DATA\AP_REQ字段,组包发送

TGS响应(TGS_REP):解密TGT并验证合法性,合法则返回要请求服务的Hash加密的ticket/encpart

产生的安全问题:

  • 白银票据:TGS_REP返回的ticket/encpart是使用服务Hash加密的,如果拥有服务的Hash,则可以给自己签发任意用户的TGS票据(白银票据)。但是伪造的白银票据没有KDC签名的PAC,如果目标主机勾选验证PAC签名,则银票不起作用
  • 票据传递PTT,pass the ticket):这里只验证了TGT票据,如果能获取到用户的TGT,不需要知道Hash也能伪造用户身份。