Golden tickets
Last updated
Was this helpful?
Last updated
Was this helpful?
The long-term key of the krbtgt
account can be used to forge a special TGT (Ticket Granting Ticket) that can later be used with Pass-the-ticket to access any resource within the AD domain. The krbtgt
's key is used to encrypt the PAC. In a Golden Ticket scenario, an attacker that has knowledge of the krbtgt
long-term key, will usually forge a PAC indicating that the user belongs to privileged groups. This PAC will be embedded in a forged TGT. The TGT will be used to request Service Tickets than will then feature the PAC presented in the TGT, hence granting lots of access to the attacker.
In order to craft a golden ticket, testers need to find the krbtgt
's RC4 key (i.e. NT hash) or AES key (128 or 256 bits). In most cases, this can only be achieved with domain admin privileges through a . Because of this, golden tickets only allow lateral movement and not privilege escalation.
There are scripts for each step of a golden ticket creation : retrieving the krbtgt
, retrieving the domain SID, creating the golden ticket.
In these situations, testers can specify all the groups ids when creating the ticket. However, deny ACEs could actually prevent this from working. Encountering a Deny ACE preventing domain admins to log on could be an issue when having all groups ids in the ticket, including the domain admin group id. This solution can also be reall inconvenient in domains that have lots of groups.
For Golden and Silver tickets, it's important to remember that, by default, and forge tickets containing PACs that say the user belongs to some well-known administrators groups (i.e. group ids 513, 512, 520, 518, 519). There are scenarios where these groups are not enough (special machines where even Domain Admins don't have local admin rights).
Another solution to this is to look for a specific user with appropriate rights to impersonate and use to generate a command that allows to forge a ticket with specific values corresponding to the target user (sid, group ids, etc.). The values are gathered from a neo4j database.