Privilege escalation is the process of turning an initial, low-privilege foothold on a single host into administrator or SYSTEM control, while Active Directory (AD) attacks extend that control outward, from one compromised machine to the domain, and sometimes the entire forest. Together they form the backbone of internal penetration testing and red teaming: almost every real intrusion follows some version of land, escalate, map the domain, move laterally, and repeat until Domain Admin is reached. This sheet is a defensive, educational reference built for practitioners who already have authorized access to a target environment — techniques are described conceptually with real tool and documentation names so they can be researched and detected, not run as-is; payload strings, ready-to-paste exploit code, and live command chains are deliberately omitted or split so nothing here trips an AV/EDR signature on a reader's own machine. The single most important mental model to keep in mind is that AD privilege escalation is rarely about a single flashy exploit: it is a graph problem — misconfigured ACLs, forgotten delegation settings, and stale group memberships chain together into paths that tools like BloodHound exist specifically to reveal.
What This Cheat Sheet Covers
This topic spans 14 focused tables and 74 indexed concepts. Below is a complete table-by-table outline of this topic, spanning foundational concepts through advanced details.
A jump-to index of every table row in this cheat sheet.
An interactive map of every table and concept in this topic.
Table 1: Windows Privilege Escalation – Misconfigured Services, Paths & Tokens
Windows local privilege escalation usually starts with the same handful of misconfigurations: a service that trusts a path, folder, or token it should not. These issues are the bread and butter of OSCP-style engagements and are almost always found with automated enumeration before anything else is tried.
| Misconfiguration | Example | Description |
|---|---|---|
Get-CimInstance win32_service | Where PathName -notmatch '^"' | Where PathName -match ' ' | A service binary path with spaces and no surrounding quotes lets Windows test each space-delimited segment as a candidate executable • a writable ancestor folder lets an attacker plant a decoy that runs with the service's privileges. | |
icacls "C:\Program Files\App\svc.exe" returns Everyone:(F) | icacls/accesschk.exe reveal Full-Control or Modify rights an unprivileged user holds on a service's executable or containing folder• replacing the binary hands code execution to whatever account runs the service. | |
accesschk64.exe -ucqv <SERVICE> shows SERVICE_CHANGE_CONFIG granted to a low-privileged user | When the service object itself (not just its binary) is misconfigured, sc config <SERVICE> binpath= <ARBITRARY_COMMAND> rewrites the command it launches on next start. | |
An app looks for version.dll in its own folder before System32 | Windows checks the application directory before trusted system paths for many DLLs • a missing dependency plus a writable app folder lets a planted DLL execute inside the calling process's privilege context. |