Kerberos协议:
客户端 服务端 密钥分发中心(KDC,分为AS和TGS)
AS:认证服务器,认证客户端的身份并发放客户用于访问TGS的TGT,即票据授予票据
TGS:票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据,即Ticket
1.客户端向AS发起身份认证,发送Name(用户名)、IP(地址)、Time(当前时间),AS在数据库中查询是否存在该用户,若没有该用户,则直接丢弃该数据包,若存在,则返回TGT
域内用户枚举:运用大量用户名进行爆破枚举,通过其返回的数据包来判断数据库中存在哪些用户。
密码喷洒:内网设备大面积密码碰撞
2.AS认证成功之后,返回一张TGT
TGT分为两部分:
第一部分:Time、TGSname、TGT有效时间、CT_SK(随机字符串),使用用户的HASH加密
第二部分:Name、IP、Time、TGSname、TGT有效时间、CT_SK,使用krbtgt(KDC上的用户名)的HASH加密(防止跳过AS认证进行伪造TGT)
3.
(1)用户使用自己的HASH密码解开第一部分的TGT,得到CT_SK,然后再用该CT_SK加密Name、IP、Time
(2)随后用TGT再向TGS发送请求,其中TGT拓展了第三部分servername(用于访问特定服务)
(3)然后将第二部分的TGT原封不动发送给TGS
(4)最后发送第一部分(除去CT_SK),和其他两部分组合成一张新的TGT
新TGT分为三部分(这部分即为黄金票据):
第一部分:Name、IP、Time,使用CT_SK加密
第二部分:Name、IP、Time、TGSname、TGT有效时间、CT_SK,使用krbtgt的HASH加密(该部分无法伪造)
第三部分:servername
4.
(1)TGS接收之后,首先知道了servername
(2)使用KDC上的krbtgt的HASH解密,得到CT_SK,再用该CT_SK解开第一部分使用客户CT_SK加密的部分,即Name、IP、Time
(3)比对两部分得到的Name、IP、Time,证明该票据是否有问题
5.
(1)TGS确认无误之后,返回一张ST
ST分为两部分:
第一部分:Time、ST有效时间、CS_SK,使用CT_SK加密
第二部分:Name、IP、ServerIP、Time、ST有效时间、CS_SK,使用serverhash加密
(2)客户端使用CT_SK解开第一部分,得到CS_SK,再使用该CS_SK对Name、Time、IP、ST有效时间进行加密、
(3)将第二部分原封不动的和加密的第一部分组合起来,发送给目标系统
6.
(1)目标系统接收之后,使用serverhash解密ST的第二部分,得到CS_SK
(2)用该CS_SK去解密第一部分,得到第一部分内容
(3)将两部分得到的内容进行对比,证明该ST无误,让客户端可以访问目标系统
黄金票据(TGT):
第一部分:Name、IP、Time,使用CT_SK加密
第二部分:Name、IP、Time、TGSname、TGT有效时间、CT_SK,使用krbtgt的HASH加密(该部分无法伪造)
第三部分:servername
除了krbtgt的HASH,其他均可伪造,而伪造CT_SK只需让第二部分使用krbtgt的HASH解密出来的CT_SK和对第一部分进行加密的CT_SK相同即可
伪造条件:
1.域名称
2.域的SID值
3.域的krbtgt账号的HASH(重点!!!)
4.伪造任意用户名(随便写)
白银票据(ST):
第一部分:nameCS_SK、Time、IPCS_SK、ST有效时间CS_SK,使用CS_SK加密
第二部分:NameCS_SK、IPCS_SK、serverIPCS_SK、TimeCS_SK、ST有效时间CS_SK、CS_SK,使用server hash加密(无法伪造,但KDC和目标系统都有该hash值)
伪造条件:
1.域名
2.域sid
3.目标服务器名
4.可利用的服务
5.服务账号的NTLM HASH,即server hash
6.伪造任意用户名
黄金票据和白银票据的区别:
黄金票据可以伪造servername,即访问目标系统的所有服务,而白银票据只可以访问目标系统的特定服务
黄金票据:伪造TGT,伪造TGT之后就可以去访问任意服务的票据
白银票据:伪造ST,伪造ST之后只能访问去某个服务的票据
非约束性委派攻击(类似SSRF):
客户端委派目标系统去访问文件系统、其他电脑等其它系统,达到跨域,域控
目标系统使用客户端的TGT,以客户端的身份得到一张目标系统访问文件系统的ST2,即目标系统代表客户端来访问文件系统