Fundamentos de Windows
Antes de atacar Windows hay que entenderlo. Quién manda (SYSTEM), dónde viven las contraseñas (SAM/LSASS), qué son los privilegios de un token y por qué ciertos privilegios equivalen a ser administrador. Este módulo es el mapa mental que hace que todo lo demás tenga sentido.
🧠El mapa: kernel, userland, procesos y servicios
Windows separa el kernel (modo núcleo, acceso total al hardware) del userland (donde corren tus programas). Cada programa es un proceso con uno o más hilos, y cada proceso lleva un token de acceso que dice QUIÉN es y QUÉ puede hacer.
| Servicios | procesos que arrancan solos en segundo plano, a menudo como SYSTEM. Mal configurados = tu vía a SYSTEM. |
| SYSTEM (NT AUTHORITY\SYSTEM) | la cuenta más poderosa de la máquina, por encima del Administrador. Tu objetivo al escalar. |
| Administrators | grupo con control total; aún así, muchas acciones necesitan subir a SYSTEM o saltar UAC. |
| Registro (registry) | la base de datos de configuración del sistema: HKLM (máquina) y HKCU (usuario). Lleno de secretos y de vectores. |
| SAM / LSA / LSASS | la SAM guarda los hashes de las cuentas LOCALES; LSASS es el proceso que maneja credenciales en memoria. Las dos joyas. |
| SYSVOL | recurso compartido del dominio (en AD) con políticas y a veces contraseñas en scripts. Enumerar siempre. |
🔑NTFS y permisos (ACL / ACE)
Cada fichero y carpeta tiene una ACL (lista de control de acceso) formada por ACE (entradas: quién puede leer/escribir/ejecutar). En la escalada, lo que buscas es un sitio donde TÚ puedas escribir algo que luego ejecuta alguien con más privilegios.
| Owner (propietario) | quien es dueño de un objeto puede cambiarle los permisos (clave en SeTakeOwnership). |
| Herencia | los permisos bajan de la carpeta a lo que hay dentro; un directorio mal puesto contamina todo su árbol. |
| icacls / Get-Acl | herramientas para LEER permisos: icacls C:\ruta te dice quién puede escribir. |
| ADS (Alternate Data Streams) | NTFS deja ocultar datos en 'flujos' alternos (fichero.txt:oculto). Truco de ocultación. |
👥Cuentas, grupos, SID y RID
Cada identidad tiene un SID (identificador único). El último trozo es el RID (500 = Administrador, 501 = Invitado, 1000+ = usuarios). Hay cuentas locales (en la SAM) y, en dominio, cuentas de dominio (en el DC).
Hay grupos que, aunque no sean "Administrators", te dan el control igual — grupos privilegiados:
| Backup Operators | SeBackup/SeRestore -> leer/escribir cualquier fichero -> dumpear la SAM = game over. |
| Server Operators | gestionar servicios en un DC -> reconfigurar un servicio a tu payload. |
| Account Operators | crear/modificar usuarios del dominio (excepto admins). |
| DnsAdmins | cargar una DLL en el servicio DNS (corre como SYSTEM en el DC). |
| Print Operators | SeLoadDriver -> cargar driver vulnerable (BYOVD). |
| Hyper-V / Remote Management Users | accesos que amplían tu superficie; enumerar siempre la pertenencia a grupos. |
⚡Privilegios de token: el mapa 'privilegio -> ser SYSTEM'
Un token lleva privilegios. Ver los tuyos: whoami /priv. Varios de ellos, aunque estés como usuario raso, equivalen a administrador porque permiten engañar al sistema. Memoriza este mapa: es el 80% de la escalada local en Windows.
| SeImpersonatePrivilege | suplantar el token de otro cliente -> familia POTATO -> SYSTEM. El rey; típico en cuentas de servicio. |
| SeAssignPrimaryTokenPrivilege | asignar token primario a un proceso; se combina con SeImpersonate en los Potato. |
| SeBackupPrivilege | leer CUALQUIER fichero saltando ACL -> copiar SAM+SYSTEM -> hashes. |
| SeRestorePrivilege | escribir CUALQUIER fichero/clave -> sobrescribir binarios de servicio, DLLs, registro. |
| SeTakeOwnershipPrivilege | apropiarte de cualquier objeto -> darte permisos -> modificarlo. |
| SeDebugPrivilege | abrir procesos de otros (incl. LSASS) -> volcar credenciales / inyectar / robar token. |
| SeLoadDriverPrivilege | cargar un driver en el kernel -> BYOVD (driver vulnerable) -> SYSTEM. |
| SeManageVolumePrivilege | acceso de bajo nivel al volumen -> escribir donde no debes -> abuso. |
| SeTcbPrivilege / SeCreateTokenPrivilege | 'actuar como el sistema' / crear tokens arbitrarios -> SYSTEM directo. |
| SeRelabelPrivilege | cambiar el nivel de integridad de objetos; abuso específico. |
Regla: si al hacer whoami /priv ves uno de estos en estado Enabled (o activable), ya tienes el vector. Cada uno tendrá su máquina-reto dedicada.
🛡Niveles de integridad y UAC
Windows etiqueta procesos con un nivel de integridad: Low, Medium, High, System. Un usuario normal corre en Medium; un admin "real" necesita High (elevado). UAC (Control de Cuentas) es lo que hace que, aunque seas admin, tu sesión normal sea Medium hasta que apruebas el "¿permitir?". Saltarlo (UAC bypass) te lleva de Medium-admin a High sin el aviso.
Diferencia clave: "ser admin" (estar en el grupo) no es lo mismo que "estar elevado" (High). A veces el reto es pasar de admin-Medium a High/SYSTEM.
🔐Autenticación: NTLM, hashes y Kerberos (conceptos)
No necesitas la contraseña en claro: con el hash NT muchas veces basta (Pass-the-Hash).
| Hash LM / NT | la SAM guarda el hash NT de cada cuenta local. LM es antiguo e inseguro (casi extinto). |
| NetNTLMv1 / v2 | lo que viaja por la red al autenticar por NTLM; capturable y crackeable/relayeable. |
| Pass-the-Hash (PtH) | usar el hash NT directamente para autenticarte, sin romper la clave. |
| Kerberos (TGT / TGS) | el protocolo de AD: pides un TGT con tu clave, y TGS para cada servicio (por su SPN). |
| SPN (Service Principal Name) | nombre del servicio en AD; la base de Kerberoasting (lo verás en AD-2). |
🛠Herramientas base que debes dominar
Antes de las de hacking, las del propio sistema (living off the land):
| cmd / PowerShell | PS es el estándar; aprende a ejecutarlo saltando políticas (-ep bypass) y en una línea. |
| WMI / wmic | consultar el sistema a fondo: servicios, software, procesos, usuarios. |
| sc / net | sc query, sc config; net user, net localgroup. |
| reg | leer/escribir el registro: reg query HKLM\...\. |
| schtasks / tasklist | tareas programadas y procesos en marcha (con /svc ves qué servicio es qué PID). |
whoami te dice el dominio\usuario; si el 'dominio' es el nombre del equipo, eres local; si es un dominio AD, estás en el dominio.