Pass-the-Ticket (Kerberos)
This method aims to extract Kerberos tickets and session keys from LSASS memory using mimikatz, before using the stolen ticket to perform actions as the injected user. This process will usually require us to have SYSTEM privileges on the machine.
We will start off with using mimikatz to extract all the Kerberos tickets present on the local machine:
mimikatz # privilege::debug
mimikatz # sekurlsa::tickets /export
While mimikatz can extract both the Ticket Granting Ticket (TGT) and Ticket Granting Service (TGS) available in the memory, we will mostly be interested in the TGTs as it allows us request to access to any service that our stolen user is allowed to access.
Once we have obtained our desired ticket (from the command shown above), we can inject the tickets into the current session:
mimikatz # kerberos::ptt xxxx@test.domain.kirbi
After running the command, we can exit from the mimikatz
shell back to the command prompt. We can use the klist
command to view the injected tickets:
C:\> klist
Note that if we execute the whoami
command, we will still see the original user we were using before performing the attack, but any commands executed from this session will use the injected credentials.
Using the injected ticket
Now that we have injected the ticket, we can perform lateral movements as the injected user. For example, we can attempt to start a service on a target remote machine:
C:\> schtasks /RU "SYSTEM" xxxx
A few basic conditions on the target machine must be in our favor :
a. schtasks
or any other desired tools are allowed
b. The injected user must be allowed to perform the desired actions (eg. in the Administrators
group)
c. Kerberos authentication is used (instead of NTLM)
this should not be an issue since Kerberos is the default for a domain environment
however, other factors may cause Kerberos to fail: DNS issues, SPN lookup failure
If all goes well, we will be able to successfully execute remote commands (eg. reverse shell) on the target machine as the injected user; or in some cases, as SYSTEM
(eg. sc.exe
which by default runs as SYSTEM
).
Last updated