前言
在了解黄金票据前,首先要清楚keberos协议,目前在windows域中采用的认证协议就是kerberos。(参考链接)
1.黄金票据的原理和条件
(1)原理
黄金票据伪造的是票据授予票据(TGT),TGT=krbtgt hash(session key,client info,end time)。TGT由AS返回给client,然后client用TGT来向TGS验证自己的身份,而client是不知道krbtgt hash的,只有AS与TGS知道krbtgt hash,所以要想伪造TGT就需要知道krbtgt hash。所以攻击者伪造黄金票据TGT的前提是获得管理员访问域控制器的权限并抓取到krbtgt hash。
而session key是由AS随机生成的,TGS在收到TGT之前并不知道,所以可以伪造。client info和end time也是可以自己定的。所以我们可以伪造由client发给TGS的TGS REQ,进而获得server ticket。
(2)条件
知道域名称、域SID值、krbtgt hash等。
2.黄金票据的局限性
在一个多域AD森林中,根域包含全森林管理组Enterprise Admins,而如果创建黄金票据的域不包含Enterprise Admins组,则黄金票据不会向林中的其他域提供管理权限,也就是说否则黄金票据不能跨域信任使用,标准的黄金票据仅限于其创建的子域。在单个域Active Directory林中,由于Enterprise Admins组会驻留在此域中,此时创建的黄金票据不存在上述局限性。
3.绕过黄金票据局限性
最新版本的Mimikatz支持将迁移域的SID历史记录添加到Enterprise Admins组的黄金票据中。这样,一旦某个域名的trbtgt hash被获取到,就可伪造用户登录到整个森林中的黄金票据,对AD森林中的任何域构成威胁。
而在Active Directory林中的信任之间启用SID筛选可以防止上述绕过黄金票据局限性的操作。
4.黄金票据的特点
(1) KDC中的TGS不通过读取AD来验证来自client的TGS REQ中的用户账户信息,知道TGT超过20分钟,这意味着攻击者可以使用禁用和删除的帐户,甚至是在Active Directory中不存在的虚拟帐户。
(2) 由于Kerberos的策略是由DC上的KDC设置的,所以如果提供票据,则系统就会信任票据的有效性。也就是说,即使域策略声明TGT只有10小时有效,但将TGT中声明的有效期改为10 年,那信任票据的有效性期会成为10年而不是10小时。
(3) 绕过了SmartCard身份验证要求,因为它绕过了DC在创建TGT之前执行的常规验证。
(4) 要求攻击者拥有Active Directory域的KRBTGT密码哈希值,从而伪造TGT。
(5) Krbtgt hash可用于生成一个有效的TGT(使用RC4),模拟任何用户访问Active Directory中的任何资源。
(6) 只要网络可以访问域,即使没有加入域,在主机上也可以生成和使用黄金票据。
5.黄金票据防御
(1) 限制域管理员登录到除域控制器和少数管理服务器以外的任何其他计算机,将所有其他权限委派给自定义管理员组。这可以降低攻击者访问域控制器的Active Directory的ntds.dit文件。而如果攻击者无法访问AD数据库(ntds.dit文件),则其无法获取到krbtgt hash。
(2) 增加更改krbtgt账户的密码的频率。
6.实践
首先假设拿到了域控,然后从域控来导出hash,之后再进行TGT伪造的操作。
在域控下执行mimikatz命令:
lsadump::dsync /domain:<域名> /user:krbtgt
获得krbtgt账户的SID 、NTLM hash和aes256_hmac
回到client,执行mimikatz命令:
mimikatz "kerberos::golden /domain:<域名> /sid:<域SID> /aes256:<aes256_hmac> /user:<任意用户名> /ptt" exit
拿到TGT就可以请求任何服务的权限,所以就不需要再单独指定需要哪一个服务了,只要目标服务支持Kerberos认证我们就可以进行访问,而且是具有一定的权限的。此处直接将票据导入内存,也可以将票据存到文件中然后在需要使用的时候再导入到内存中。
在cmd中使用klist命令可以查看当前票据,这个时候我们就可以访问文件共享等服务了。