Ghost AcademyGhostOffensive · Ghost Academy
GhostOffensiveMódulo 13Con laboratorio

Escalada de privilegios en Windows

Has conseguido ejecutar comandos en una máquina Windows, pero como un usuario cualquiera. La escalada de privilegios es el paso de esa cuenta limitada a NT AUTHORITY\SYSTEM (o a un administrador), que es quien de verdad controla el equipo. Rara vez se logra con un solo exploit mágico: casi siempre es el resultado de enumerar con paciencia y encontrar una configuración descuidada.

Objetivos de la unidad
Nota sobre el laboratorio. Windows no corre en el Docker de este curso, así que el laboratorio de este módulo es un campo de identificación: presenta la enumeración simulada de una estación Windows y te pide reconocer cada vector. La explotación concreta —que solo se reproduce sobre un Windows real— se detalla, marcada como ilustrativa, en el writeup. Para practicarla en vivo, monta una VM de Windows.

1. El modelo de seguridad de Windows

Para escalar hay que entender contra qué se juega. Windows identifica y autoriza así:

La meta de la escalada es conseguir un token de mayor privilegio: el de un administrador o el de SYSTEM.

2. Metodología: enumerar antes de explotar

La escalada en Windows es 90% enumeración. Se recopila el estado del sistema y se buscan descuidos. A mano, los comandos base:

kali@lab
$ whoami /priv        # privilegios del token actual
whoami /groups      # grupos y su SID
systeminfo          # versión, parches (hotfix) para privesc por kernel
net user / net localgroup administrators

Y automatizado, el estándar del sector: winPEAS (enumeración exhaustiva que resalta en color lo explotable), PowerUp (PowerShell, orientado a servicios y rutas) y accesschk de Sysinternals (comprueba permisos concretos). No sustituyen al criterio —marcan candidatos que hay que verificar—, pero ahorran horas.

Este laboratorio te entrega precisamente una salida tipo winPEAS ya recogida: el trabajo es leerla como la leería un pentester.

3. Servicios mal configurados

Los servicios de Windows suelen correr como SYSTEM, así que son el vector más rentable. Tres fallos distintos:

3.1. Ruta sin comillas con espacios (unquoted service path)

Si la ruta del binario de un servicio tiene espacios y no está entre comillas, Windows, al arrancarlo, prueba a interpretar cada fragmento como ejecutable. Con la ruta C:\Program Files\Meridian Sync\sync service\syncsvc.exe, Windows intenta en orden:

kali@lab
$ C:\Program.exe
C:\Program Files\Meridian.exe
C:\Program Files\Meridian Sync\sync.exe
...

Si el atacante puede escribir en C:\ o en C:\Program Files\Meridian Sync\, coloca ahí un sync.exe (o Meridian.exe) malicioso y el servicio, que corre como SYSTEM, lo ejecutará en su lugar. La condición doble es: ruta sin comillas con espacios y permiso de escritura en una de las carpetas intermedias.

3.2. Permisos débiles del servicio

Si tu usuario tiene SERVICE_CHANGE_CONFIG sobre un servicio (lo revela accesschk), puedes reconfigurar qué binario ejecuta y reiniciarlo:

kali@lab
$ sc config MeridianBackup binPath= "C:\Windows\Temp\rev.exe"
sc stop MeridianBackup & sc start MeridianBackup

El servicio arranca tu binario como SYSTEM. Es de los más directos.

3.3. Permiso de escritura sobre el binario

Si puedes sobrescribir directamente el .exe del servicio, lo reemplazas por el tuyo y esperas (o fuerzas) un reinicio.

4. AlwaysInstallElevated

Es una política que permite a cualquier usuario instalar paquetes .msi con privilegios de SYSTEM. Está activa solo si las dos claves del registro valen 1:

kali@lab
$ reg query HKLM\...\Installer /v AlwaysInstallElevated   -> 0x1
reg query HKCU\...\Installer /v AlwaysInstallElevated   -> 0x1

Con ambas a 1, se genera un MSI malicioso (por ejemplo con msfvenom -f msi) y se instala; su carga se ejecuta como SYSTEM. Basta una de las dos en 0 para que no funcione.

5. Credenciales guardadas

Windows y sus aplicaciones dejan contraseñas por muchos rincones. Los clásicos:

DóndeQué guarda
Registro Winlogon (autologon)DefaultUserName y DefaultPassword en claro si hay inicio de sesión automático
Ficheros de despliegueunattend.xml, sysprep.xml, Autounattend.xml con credenciales de instalación
cmdkey /listCredenciales guardadas reutilizables con runas /savecred
Historial y ficheros de usuarioPowerShell history, notas, scripts con contraseñas incrustadas

Una contraseña de administrador encontrada aquí escala sin explotar nada: simplemente la usas.

6. Privilegios de token peligrosos

Ciertos privilegios en tu token equivalen a SYSTEM aunque seas un usuario normal. El más frecuente es SeImpersonatePrivilege, que tienen por defecto las cuentas de servicio (IIS, MSSQL): permite suplantar el token de un cliente que se conecte. La familia de exploits "Potato" (JuicyPotato, RoguePotato, PrintSpoofer, GodPotato) abusa de él forzando a un proceso SYSTEM a autenticarse contra ti y robando su token.

kali@lab
$ whoami /priv | findstr SeImpersonate   -> SeImpersonatePrivilege  Enabled
PrintSpoofer.exe -i -c cmd   # shell como SYSTEM

Otros de la misma liga: SeBackupPrivilege (leer cualquier fichero, incluido el SAM), SeRestorePrivilege, SeDebugPrivilege (inyectar en procesos SYSTEM) y SeTakeOwnershipPrivilege. Ver un privilegio de estos habilitado en whoami /priv es señal de escalada casi segura.

7. DLL hijacking

Cuando un programa carga una DLL por su nombre sin ruta completa, Windows la busca en un orden concreto de directorios. Si el programa (corriendo como SYSTEM) intenta cargar una DLL que no existe, y el atacante puede escribir en uno de los directorios donde se busca, coloca ahí una DLL maliciosa con ese nombre y el proceso privilegiado la cargará y ejecutará su código. La condición: una DLL ausente (se ve con Procmon como NAME NOT FOUND) y un directorio de búsqueda escribible.

8. Tareas programadas y autoruns

Dos vectores gemelos basados en "algo privilegiado ejecuta un fichero que tú puedes modificar":

En ambos, el patrón defensivo es el mismo: lo que ejecuta un usuario privilegiado no debe ser modificable por uno sin privilegios.

9. Escalada por kernel

Cuando la configuración está limpia, queda el propio sistema operativo: un Windows sin parchear puede ser vulnerable a un exploit de kernel (por ejemplo la familia que da SYSTEM directamente). systeminfo revela la versión y los hotfix instalados; herramientas como Watson o el propio winPEAS cruzan esa información con exploits conocidos. Es el último recurso, porque un exploit de kernel puede tumbar la máquina si falla: se prueba con cuidado y, a ser posible, en una réplica primero (módulo 10).

Para profundizar
🧰 Herramientas relacionadas (Ghost Academy)

Guías y laboratorios ya publicados en Ghost Academy sobre las herramientas de este módulo:

Windows Privilege Escalation · PEASS-ng

Laboratorio: Meridian Workstation

⬇ Descargar laboratorio (ZIP)

Descomprime, lee el LEEME.md y lanza startlab.sh. Es un campo de identificación: un informe de enumeración de una estación Windows con 8 vías de escalada a SYSTEM. Reconócelas y verifícalas en http://localhost:9090. Cada acierto revela una flag GO{...}.

Recuerda: aquí identificas; la explotación paso a paso de cada vector está en el writeup.

¿Atascado o ya terminado? La solución paso a paso muestra cada vector y cómo se explotaría. Úsala cuando lo hayas intentado.

Autoevaluación

  1. ¿Por qué la autorización en Windows depende del token del proceso y no de "quién lo ejecutó"?
  2. ¿Qué dos condiciones deben darse a la vez para explotar una ruta de servicio sin comillas?
  3. ¿Por qué AlwaysInstallElevated necesita las dos claves del registro a 1?
  4. Ves SeImpersonatePrivilege habilitado en tu token. ¿Qué familia de exploits te viene a la cabeza y por qué?
  5. ¿Qué hace explotable a una tarea programada que corre como SYSTEM?
  6. ¿Por qué un exploit de kernel es el último recurso de una escalada?
  7. Ser miembro del grupo Administrators no es lo mismo que tener un proceso con privilegios de administrador. ¿Por qué?