| name | conducting-pass-the-ticket-attack |
| description | Pass-the-Ticket (PtT) is a lateral movement technique that uses stolen Kerberos tickets (TGT or TGS) to authenticate to services without knowing the user's password. By extracting Kerberos tickets fro |
| domain | cybersecurity |
| subdomain | red-teaming |
| tags | ["red-team","adversary-simulation","mitre-attack","exploitation","post-exploitation","kerberos","pass-the-ticket","lateral-movement"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
| d3fend_techniques | ["Token Binding","Execution Isolation","Restore Access","Application Protocol Command Analysis","Process Termination"] |
| nist_csf | ["ID.RA-01","GV.OV-02","DE.AE-07"] |
Conducting Pass-the-Ticket Attack
Legal Notice: This skill is for authorized security testing and educational purposes only. Unauthorized use against systems you do not own or have written permission to test is illegal and may violate computer fraud laws.
Overview
Pass-the-Ticket (PtT) is a lateral movement technique that uses stolen Kerberos tickets (TGT or TGS) to authenticate to services without knowing the user's password. By extracting Kerberos tickets from memory (LSASS) on a compromised host, an attacker can inject those tickets into their own session to impersonate the ticket owner and access resources as that user.
When to Use
- When conducting security assessments that involve conducting pass the ticket attack
- When following incident response procedures for related security events
- When performing scheduled security testing or auditing activities
- When validating security controls through hands-on testing
Most Often Missed & How to Confirm
- Confusing ticket formats. Mimikatz exports
.kirbi; Impacket/Linux tools want .ccache. Convert with ticketConverter.py before injecting, or the ptt silently does nothing.
- Not purging existing tickets first. Stale TGTs in the session cause auth to use the wrong identity. Run
klist purge / Rubeus purge before injecting.
- Grabbing a TGS when you need a TGT. A service ticket only opens one service; for broad lateral movement extract the TGT (Rubeus
tgtdeleg or sekurlsa::tickets /export).
- Ignoring ticket lifetime. Injecting an expired or near-expired ticket fails; check the End/Renew time.
- Reusing one ticket across many hosts, which lights up Event 4769 from anomalous source IPs.
- How to confirm: after injection,
klist (or Rubeus klist) shows the stolen ticket loaded with a valid endtime, and an action as the impersonated user succeeds — e.g. dir \\dc01\c$ returns, or psexec.py -k -no-pass with KRB5CCNAME set lands a shell. Don't conclude PtT failed until you've verified the format conversion, purged the old cache, and confirmed the ticket isn't expired.
Prerequisites
- Familiarity with red teaming concepts and tools
- Access to a test or lab environment for safe execution