Unconstrained Delegation Abuse – TGT Capture
A host configured for unconstrained delegation stores incoming TGTs in LSASS memory, including TGTs from any domain account that authenticates to it. If you compromise such a host, you can capture those TGTs and use them for pass-the-ticket lateral movement.
The most reliable way to get a high-value TGT is to coerce a Domain Controller's machine account to authenticate to your compromised host. A DC machine account has DCSync rights, so capturing its TGT gives you a path to full domain compromise.
You need local admin or SYSTEM on a host configured for unconstrained delegation. Finding those hosts is an enumeration task, look for the TRUSTED_FOR_DELEGATION flag in computer account UAC attributes via BloodHound or PowerView.
Identifying Unconstrained Delegation Hosts
From a Windows foothold with PowerView:
Note: Domain Controllers always have unconstrained delegation enabled. Compromising a DC is the end state, not the starting point, look for non-DC hosts with this flag set.
Capturing TGTs with Rubeus Monitor Mode
Once you have SYSTEM on the delegation host, start Rubeus in monitor mode to capture incoming TGTs in real time:
This polls LSASS every 5 seconds and prints any new TGTs as base64 blobs.
Coercing DC Authentication with SpoolSample
With Rubeus monitoring, trigger the DC to authenticate to your compromised host using the printer bug (MS-RPRN):
Warning
This may be restricted in exams such as OSCP. Verify exam rules before use.
$DC_HOSTNAME is the target DC. $DELEGATION_HOST is the host you control with unconstrained delegation. The DC's machine account TGT will appear in Rubeus output within seconds.
Alternatives if SpoolSample fails or the print spooler is disabled:
PetitPotam (MS-EFSRPC):
PetitPotam.exe $DELEGATION_HOST $DC_HOSTNAMECoercer:
coercer coerce -t $DC_HOSTNAME -l $DELEGATION_HOST -u $USER -p $PASSWORD -d $DOMAIN
For the full coercion technique reference, see AD Coercion Attacks.
Using the Captured TGT
Copy the base64 blob from Rubeus output. Inject it into a session on your attack box after converting:
Save the base64 blob to a file, then decode and import:
Or from Linux, decode the base64 to a .kirbi file and convert:
With the DC machine account TGT, run DCSync to dump the domain:
This dumps all domain hashes. For post-DCSync paths, see Active Directory DCSync and Domain Takeover. From here, create a Golden Ticket using the krbtgt hash, see Golden Ticket / Silver Ticket.
Cross-Domain Escalation
If the unconstrained delegation host is in a child domain and you coerce a parent domain DC, the captured TGT may give you a foothold in the parent domain. The same pass-the-ticket workflow applies with the parent DC's machine account TGT.
References
-
GhostPack monitor, dump, and ptt module documentation.
-
Lee Christensen MS-RPRN coercion tool for triggering DC authentication.
-
p0dalirius/Coercegithub.com/p0dalirius/coercer (opens in new tab)
Coercer Multi-method authentication coercion tool supporting MS-RPRN, MS-EFSRPC, and other protocols.
Was this helpful?
Your feedback helps improve this page.