Pass-the-Hash and Pass-the-Ticket
Pass-the-Hash and Pass-the-Ticket are the two primary lateral movement mechanisms in Active Directory. Pass-the-Hash uses an NTLM hash directly as an authenticator against services that accept NTLM. Pass-the-Ticket injects a Kerberos TGT or TGS into the current session to authenticate against services that require Kerberos. Both techniques require no plaintext password and work as long as the hash or ticket is valid.
Hashes come from DCSync, LSASS dumps, or SAM extraction. Tickets come from Rubeus, ccache files, or impacket. The choice between PtH and PtT depends on what the target service accepts and what credential material you have.
Pass-the-Hash with nxc
nxc is the fastest way to validate a hash and identify where it works across the network. Run a subnet sweep before targeting individual hosts.
SMB 10.10.10.20 445 WS01 [+] corp.local\jsmith:aad3... (Pwn3d!) SMB 10.10.10.30 445 WS02 [+] corp.local\jsmith:aad3... (Pwn3d!)
Pass-the-Hash with impacket
Impacket tools accept hashes in LM:NT format. Use a null LM component when only the NT hash is available. Each tool gives a different execution primitive — use the one that fits the target environment.
C:\Windows\system32> whoami corp\jsmith
Pass-the-Hash with evil-winrm
evil-winrm accepts NT hashes directly for WinRM access. Useful when the target has port 5985 open and the account has WinRM access.
*Evil-WinRM* PS C:\Users\jsmith\Documents>
For the full Evil-WinRM workflow once inside, see Evil-WinRM.
Pass-the-Ticket — inject a ccache ticket
Kerberos tickets obtained from DCSync, Rubeus, or delegation abuse are stored as .ccache files on Linux and .kirbi on Windows. Set KRB5CCNAME to point impacket tools at the ticket, or use Rubeus to inject it into the current Windows session.
On Kali: /usr/share/rubeus/Rubeus.exe
Credentials cache: FILE:/tmp/Administrator.ccache Principal: [email protected] Valid until: Apr 30 2026
[+] Ticket successfully imported! Current LogonId: 0:0x4e865 [0] [email protected]
Over-Pass-the-Hash
Over-Pass-the-Hash converts an NT hash into a Kerberos TGT. Useful when NTLM authentication is blocked or when a full Kerberos session is needed. Rubeus performs this as asktgt — it requests a TGT from the KDC using the NT hash as the encryption key.
[+] TGT request successful [+] Ticket successfully imported!
[*] Saving ticket in jsmith.ccache
When sweeping with a hash, look for Pwn3d! in nxc output — that indicates local admin access, not just authentication. Hosts where your hash gives local admin are immediate lateral movement targets. Feed hostnames from the sweep into Credential Harvesting to collect fresh hashes from LSASS on each compromised host. If the hash works against RDP, use RDP Pass-the-Hash for GUI access.
Related
References
-
Impacket — GitHubgithub.com/fortra/impacket (opens in new tab)
psexec, wmiexec, smbexec, getTGT hash and ticket usage
-
NetExec (nxc) — GitHubgithub.com/Pennyw0rth/NetExec (opens in new tab)
SMB PtH sweep and --use-kcache module
-
Rubeus — GhostPack GitHubgithub.com/GhostPack/Rubeus (opens in new tab)
ptt, asktgt for ticket injection and Over-PtH
Was this helpful?
Your feedback helps improve this page.