Grandpa
Windows Easy de manual: un IIS 6.0 sobre Server 2003 con WebDAV vulnerable a CVE-2017-7269 da shell sin credenciales, y el privilegio SeImpersonate abre la puerta a SYSTEM con Churrasco.
Grandpa
| Máquina | SO | Dificultad | IP |
|---|---|---|---|
| Grandpa | Windows | Easy | 10.129.83.151 |
A tener en cuenta...
Resumen
Grandpa es una de esas máquinas que no intentan ser listas: son un museo. Detrás de un único puerto abierto hay un Windows Server 2003 con IIS 6.0, software que lleva fuera de soporte desde 2015 y que arrastra un fallo crítico en su módulo WebDAV.
El camino es corto y no tiene desvíos. Un buffer overflow remoto da shell sin credenciales ni enumeración complicada, y una vez dentro el propio privilegio de la cuenta de servicio regala el resto: de NETWORK SERVICE a SYSTEM en un comando.
Lo interesante no es la técnica, que es de manual, sino lo que representa — una máquina que nadie actualizó y que, veinte años después, sigue cayendo igual.
Vulnerabilidad
Dos piezas encadenadas: una para entrar sin llamar a la puerta y otra para quedarse con todo.
01 · Buffer Overflow en el WebDAV de IIS 6.0 — CVE-2017-7269 (Crítica · 9.8)
La función ScStoragePathFromUrl del servicio WebDAV de Internet Information Services 6.0 no valida la longitud de la cabecera If en una petición PROPFIND. Una cabecera larga que empiece por If: <http:// desborda el buffer y permite ejecutar código arbitrario sin autenticación previa.
El detalle que la hace especialmente sucia: la función se llama dos veces, lo que facilita la explotación fiable. Afecta a Windows Server 2003 R2 y se explotó in the wild en julio y agosto de 2016, meses antes de hacerse pública en marzo de 2017.
02 · Suplantación de token con SeImpersonatePrivilege
El código se ejecuta dentro del proceso de IIS, que corre como NT AUTHORITY\NETWORK SERVICE. Esa cuenta conserva SeImpersonatePrivilege: puede suplantar a un cliente después de autenticarlo.
Ese permiso, pensado para que los servicios actúen en nombre de quien les llama, permite robar el token de un proceso que sí es SYSTEM — en la práctica, el servicio RPCSS — y lanzar un proceso nuevo con él. Es la familia de ataques conocida como Potato.
Reconocimiento
Caja negra y sin pistas: lo primero es ver qué hay escuchando. Barrido completo de puertos contra la víctima
| Puerto | Servicio |
| 80 | http |
Un único puerto abierto de los 65.535, y los otros 65.534 filtrados. No hay SMB, no hay RDP, no hay RPC: todo el ataque va a tener que entrar por ese 80.

Enumeración
Con un solo puerto, toca exprimirlo. Afino versión y lanzo de paso los scripts de vulnerabilidades web de nmap

Y ahí está todo el write-up en una línea: Microsoft IIS 6.0. Esa versión solo vino con Windows Server 2003, un sistema sin soporte desde julio de 2015. Antes de darlo por hecho, lo confirmo con whatweb

El MicrosoftOfficeWebServer es el dato que más me interesa: delata las FrontPage Server Extensions, que van de la mano de WebDAV. Lo corroboro con un fuzzing de rutas

Los _vti_ por todas partes y las .dll de autoría respondiendo 200 confirman que las extensiones están vivas. La web en sí, en cambio, no tiene nada: un Under Construction por defecto de IIS, sin una sola página propia

Mejor así. No hay que buscar un formulario ni un panel: la vulnerabilidad está en el servidor, no en la aplicación.
Explotación
Con la versión fijada, busco qué arrastra ese IIS

Entre denegaciones de servicio y bypass de autenticación destaca uno, y es el único que da ejecución remota de código
Lo descargo directamente desde searchsploit para leerlo
La ficha en Exploit-DB confirma que es lo que busco: EDB-ID 41738, CVE-2017-7269, publicado en marzo de 2017 por Zhiniang Peng y Chen Wu, contra Windows Server 2003 R2

El 41738.py original es de Python 2 y hay que retocarlo para que funcione hoy. Antes de pelearme con eso busco si alguien lo ha reescrito, y en GitHub encuentro nika0x38/CVE-2017-7269, una implementación en Rust del mismo PoC

Un paréntesis sobre Cargo
Que esté en Rust cambia una cosa: no se ejecuta con un intérprete, hay que compilarlo. Y para eso hace falta cargo, que es a Rust lo que pip y make juntos son a Python. Cargo descarga las dependencias, las compila y construye el binario final, todo con un comando.
Trabaja con estos ficheros:
- Cargo.toml: el manifiesto del proyecto. Formato TOML (Tom's Obvious Minimal Language), un INI con esteroides. Declara el nombre, la versión y, sobre todo, las dependencias.
- Cargo.lock: generado por Cargo. Congela la versión exacta de cada dependencia para que la compilación sea reproducible. No se toca a mano.
- src/*.rs: el código fuente en Rust. src/main.rs es el punto de entrada de un ejecutable.
Si no está instalado, se resuelve con apt install cargo o con rustup. El README documenta cómo lanzarlo

La herramienta parchea el shellcode al vuelo con la IP y el puerto que le pase, y lo entrega en el cuerpo de la petición HTTP. Así que me pongo en escucha y lo lanzo
El --release no es un capricho: compila optimizado y el binario resultante es el que espera el README. Al otro lado, el listener recibe la conexión

Ya estoy dentro. El 5.2.3790 es la confirmación definitiva de que esto es un Server 2003, y el directorio de trabajo — system32\inetsrv — recuerda que la shell vive dentro del propio proceso de IIS.
Escalada de privilegios
Lo primero, saber dónde he caído

Un solo hotfix instalado en un Server 2003 con SP2. La máquina no se ha parcheado nunca. Ahora, los privilegios de la cuenta desde la que estoy ejecutando

Ahí está la llave: SeImpersonatePrivilege en Enabled. Con ese privilegio toda la familia Potato está sobre la mesa, pero cada herramienta cubre una franja de versiones y hay que elegir la correcta
- Churrasco: Windows XP y Server 2003
- JuicyPotato: Server 2008 hasta 2016
- PrintSpoofer / GodPotato: Windows 10 y Server 2016–2022
Siendo un 2003, la única que encaja es Churrasco. Es la herramienta de Cesar Cerrudo que acompañó a su charla Token Kidnapping de DEF CON 18: localiza el proceso del servicio RPCSS, recorre sus hilos buscando uno que esté suplantando, le roba el token de SYSTEM y ejecuta con él el comando que le pases. Está en Re4son/Churrasco con el binario ya compilado.
Necesito subir dos ficheros a la víctima: el propio churrasco.exe y un nc.exe con el que devolverme la shell privilegiada. Los sirvo desde mi máquina

Aquí aparece el obstáculo típico de esta máquina: en Server 2003 no hay PowerShell, así que el wget habitual no existe. La vía que sí funciona es escribir un VBScript a golpe de echo y ejecutarlo con cscript
Uso C:\WINDOWS\Temp porque es de los pocos directorios donde NETWORK SERVICE tiene permiso de escritura. Repito la operación para el churrasco.exe y compruebo que han llegado los dos

Con un listener nuevo esperando, ejecuto Churrasco pasándole como argumento el nc.exe que acabo de subir
La traza cuenta el ataque paso a paso: encuentra el proceso RPCSS, recorre sus hilos hasta dar con uno que esté suplantando, se queda con el token y lanza el comando con él. El listener confirma el resultado

NT AUTHORITY\SYSTEM. Control total de la máquina.
Flags
Con el máximo privilegio, recojo las dos banderas. Ojo al detalle de la época: en Server 2003 los perfiles no viven en C:\Users sino en C:\Documents and Settings.
La de usuario, en el escritorio de Harry

Y la de root, en el de Administrator

Cómo se arregla
Aquí no hay un parche que aplicar y listo: el problema es que el sistema entero lleva una década muerto. Por capas:
- Migrar de Windows Server 2003: sin soporte desde el 14 de julio de 2015. No recibe actualizaciones de seguridad, así que cualquier fallo descubierto después se queda abierto para siempre. Es la única solución real.
- Desactivar WebDAV: si no se puede migrar de inmediato, deshabilitar la extensión en IIS elimina el vector de CVE-2017-7269. Lo mismo con las FrontPage Server Extensions, que no pintan nada en un servidor moderno.
- Quitar SeImpersonatePrivilege a las cuentas de servicio: sin ese privilegio, toda la familia Potato deja de funcionar y la ejecución remota se queda en una shell sin privilegios.
- Filtrar el tráfico saliente: la intrusión depende de que la víctima pueda conectarse de vuelta al atacante y descargarse binarios. Restringir las conexiones salientes corta las reverse shell y la subida de churrasco.exe.
- No exponer servidores legacy: si una máquina así tiene que seguir viva, que sea en una red segmentada y sin acceso directo desde fuera.
Conclusiones
Máquina sencilla y directa, de las que se resuelven de un tirón. No innova ni busca sorprender: encuentras la versión, encuentras el CVE, lo lanzas y ya estás dentro. La escalada es igual de limpia — un privilegio mal puesto y una herramienta de 2010 que sigue haciendo su trabajo.
Se queda algo corta de contenido y de dificultad, y quien busque enumeración creativa o un giro inesperado no lo va a encontrar aquí. Pero como primera toma de contacto con Windows es muy recomendable: enseña a identificar un sistema por su versión de servidor, a elegir la herramienta correcta dentro de una familia de exploits, y a buscarse la vida sin PowerShell cuando el objetivo es lo bastante viejo.
La lección de fondo es la de siempre, y no por repetida deja de cumplirse: un sistema sin soporte no es un sistema con riesgo, es un sistema ya perdido.