// 01
Resumen
Tproot es una máquina de dificultad muy fácil de la plataforma DockerLabs. Corre sobre Linux Ubuntu y expone dos servicios: FTP (puerto 21) con vsftpd 2.3.4 y un servidor web HTTP (puerto 80) con Apache 2.4.58.
Esta máquina es un caso de estudio clásico sobre vulnerabilidades públicamente conocidas y la importancia de mantener el software actualizado. El vector de ataque es completamente directo: el servicio FTP ejecuta vsftpd versión 2.3.4, una versión que fue comprometida en su cadena de suministro en julio de 2011. Un atacante malicioso inyectó una backdoor en el código fuente oficial, haciendo que el servidor abriera una shell de comandos en el puerto 6200 al recibir una cadena específica durante el proceso de login FTP.
A diferencia de otras máquinas de la plataforma, aquí no hay escalada de privilegios: la backdoor otorga acceso como root directamente. El proceso completo —desde el despliegue hasta la flag— se ejecuta en menos de 5 minutos, lo que la convierte en una máquina ideal para entender el ciclo de reconocimiento → identificación de CVE → explotación con herramientas de la comunidad.
| Fase | Técnica / Herramienta | Resultado |
|---|---|---|
| Despliegue | auto_deploy.sh + ping TTL | Máquina activa en 172.17.0.2 · Linux confirmado |
| Reconocimiento | Nmap -p- -sSCV full scan → export XML | Puerto 21 vsftpd 2.3.4 · Puerto 80 Apache 2.4.58 |
| Análisis de versión | Inspección del reporte Nmap XML (xsltproc) | vsftpd 2.3.4 marcado como potencialmente vulnerable |
| Búsqueda de exploit | searchsploit vsftpd 2.3.4 | CVE-2011-2523 — Backdoor Command Execution (49757.py) |
| Obtención del exploit | searchsploit -m 49757.py | Script Python copiado al directorio de trabajo |
| Explotación | python3 49757.py 172.17.0.2 | Shell interactiva abierta como root |
| Post-explotación | script /dev/null -c bash · whoami · ls · cat | TTY estabilizada · root@dockerlabs · flag obtenida |
// CONTEXTO HISTÓRICO — CVE-2011-2523
En julio de 2011, el repositorio oficial de vsftpd en vsftpd.beasts.org
fue comprometido. El atacante modificó el archivo fuente sysdeputil.c para que,
al recibir un nombre de usuario que contuviera el carácter ":)" (carita feliz),
el servidor ejecutara una shell en el puerto 6200/tcp con privilegios de root.
La backdoor estuvo disponible públicamente por menos de un día antes de ser detectada,
pero el impacto fue significativo dado que vsftpd era uno de los servidores FTP más usados
en sistemas Linux de la época. Este incidente es un ejemplo de ataque a la
cadena de suministro de software años antes de que el término se popularizara.
// 02
Reconocimiento
El primer paso es desplegar el contenedor vulnerable. DockerLabs proporciona el script auto_deploy.sh que construye la imagen a partir del archivo comprimido tproot.tar, asigna automáticamente una dirección IP dentro de la red interna Docker (172.17.0.x) y mantiene el contenedor activo hasta que se presione Ctrl+C. Se requiere sudo porque Docker necesita privilegios elevados para gestionar interfaces de red y el daemon de contenedores.
Con el contenedor desplegado, verificamos conectividad enviando 3 paquetes ICMP con la flag -c 3. Más allá de confirmar que el host está activo, el campo TTL de la respuesta nos permite inferir el sistema operativo sin usar ninguna herramienta adicional: un TTL=64 indica Linux (Windows devuelve 128, Cisco IOS devuelve 255). En redes Docker sin routers intermedios, el TTL recibido es idéntico al TTL original del host, haciendo la identificación directa y fiable. Este dato orienta todo el reconocimiento posterior hacia herramientas y técnicas específicas de Linux.
Con conectividad confirmada, lanzamos un escaneo exhaustivo con Nmap.
Las flags utilizadas cubren el espectro completo de análisis: -p-
escanea los 65,535 puertos TCP en lugar de solo los 1,000 más comunes,
garantizando que no se nos escape ningún servicio. -sSCV combina
SYN scan sigiloso (-sS), detección de versiones de servicios (-sV)
y ejecución de scripts NSE de categoría default (-sC), que realizan checks
automáticos como intentos de login anónimo en FTP, enumeración de headers HTTP, etc.
-n desactiva la resolución DNS para acelerar el proceso,
-Pn omite el host discovery (asumimos que el host está activo
tras el ping previo), y --min-rate=5000 establece una tasa
mínima de 5,000 paquetes por segundo para completar el escaneo en segundos en lugar de
minutos.
Finalmente, -oX tproot.xml exporta los resultados en formato XML, lo que permite procesarlos posteriormente con herramientas como xsltproc para generar un reporte HTML visual y navegable — una práctica recomendada para documentar hallazgos de forma profesional.
// HALLAZGO CRÍTICO
El escaneo revela vsftpd 2.3.4 en el puerto 21. Esta versión específica es notoriamente vulnerable: fue la versión infectada con una backdoor en 2011 y está catalogada en múltiples bases de datos de vulnerabilidades como explotable de forma trivial. La presencia de esta versión en un entorno expuesto es una señal de alerta inmediata que debe investigarse como primera prioridad.
El archivo tproot.xml generado por Nmap puede transformarse en un reporte HTML interactivo y navegable utilizando xsltproc con la hoja de estilos que Nmap incluye en su instalación. Esto produce una vista tabular de todos los hosts, puertos y servicios descubiertos, facilitando la revisión rápida de resultados y su inclusión en informes de seguridad. En el reporte se confirma que el puerto 21 muestra vsftpd 2.3.4 con el estado de la versión destacado en rojo como señal de versión potencialmente vulnerable.
// 03
Explotación
Con la versión vsftpd 2.3.4 identificada, el siguiente paso es verificar si existe un exploit público para ella. Searchsploit es la interfaz de línea de comandos para Exploit-DB, una base de datos de exploits mantenida por Offensive Security. Al buscar por nombre y versión, obtenemos dos resultados: un exploit en Python puro (49757.py) y su versión para Metasploit (17491.rb). En este writeup utilizaremos el script Python manual para entender el funcionamiento del exploit sin depender de frameworks externos.
El resultado confirma que esta vulnerabilidad está clasificada como "Backdoor Command Execution" y referenciada bajo el código CVE-2011-2523, lo que valida completamente el vector de ataque.
La flag -m de searchsploit (mirror) copia el archivo del exploit directamente al directorio de trabajo actual, evitando tener que navegar manualmente hasta la ruta de Exploit-DB en el sistema. El output confirma la ruta original del exploit, el tipo de archivo (Python script), su URL en Exploit-DB para referencia, y el código CVE asociado. El campo Verified: True indica que el exploit ha sido probado y confirmado como funcional por el equipo de Exploit-DB, lo que aumenta la confianza en que la explotación será exitosa.
Ejecutamos el script Python proporcionando únicamente la IP del objetivo como argumento. El exploit funciona en dos fases: primero abre una conexión al puerto 21/tcp y envía un nombre de usuario que contiene la secuencia :) (el trigger de la backdoor), lo que hace que el servidor vsftpd lance una shell de root en el puerto 6200/tcp. Inmediatamente después, el script se conecta a ese puerto y nos entrega una shell interactiva ya como root.
Es posible que la primera ejecución no responda correctamente si el puerto 6200 tardó
en abrirse; en ese caso basta con ejecutar el script una segunda vez para obtener la
conexión estable. Una vez dentro, estabilizamos la TTY con
script /dev/null -c bash, que reemplaza la pseudo-terminal
básica de la backdoor por una bash completamente funcional con soporte para Ctrl+C,
historial de comandos, y colores. El comando whoami confirma acceso como
root sin necesidad de ninguna escalada de privilegios adicional.
// CÓMO FUNCIONA LA BACKDOOR INTERNAMENTE
El código malicioso inyectado en vsftpd 2.3.4 se encuentra en la función
vsf_sysutil_extra(). Al recibir un nombre de usuario que contiene
":)", el servidor ejecuta un fork() y el proceso hijo
llama a execl("/bin/sh", "-sh", NULL) escuchando en el puerto
6200/tcp. Este proceso hijo hereda los privilegios del proceso padre
de vsftpd, que normalmente corre como root durante la fase de
autenticación para poder verificar credenciales contra /etc/shadow.
El resultado es una shell root sin autenticación expuesta en la red.
// 04
Post-Explotación
Con acceso como root, realizamos una enumeración básica del sistema para orientarnos
dentro del contenedor y localizar la flag. Desde el directorio /tmp donde
aterrizamos inicialmente, navegamos a la raíz del sistema y desde ahí al directorio
/root, que en Linux es el home del superusuario y el lugar
habitual donde DockerLabs coloca las flags de root. Un ls revela el archivo
root.txt, cuyo contenido es la flag en formato hash MD5.
// LECCIÓN APRENDIDA — GESTIÓN DE VERSIONES
Esta máquina ilustra perfectamente por qué la gestión de versiones y parcheo es una de las prácticas más críticas en seguridad. vsftpd 2.3.4 tiene una vulnerabilidad pública desde 2011 — hace más de una década. Un atacante no necesita ninguna habilidad especial: basta con ejecutar Nmap, identificar la versión, buscar en Exploit-DB y lanzar el script. En entornos reales, cualquier servicio expuesto a Internet con esta versión representa una puerta de entrada inmediata a root. La solución es simple: actualizar a versiones mantenidas activamente y aplicar el principio de mínima exposición de servicios.
// 05
Referencia de Comandos
-p-— Escanea los 65,535 puertos TCP-sS— SYN scan (sigiloso, no completa el handshake)-sC— Scripts NSE de categoría default-sV— Detección de versión de servicios-n— Sin resolución DNS (más rápido)-Pn— Omite host discovery previo--min-rate— Tasa mínima de paquetes/segundo--open— Muestra solo puertos abiertos-oX— Exporta resultados a formato XML
-m <ruta>— Copia (mirror) el exploit al directorio actual-u— Actualiza la base de datos local de exploits-t— Busca solo en el título del exploit-w— Muestra URL de Exploit-DB en lugar de ruta local--id— Muestra el ID de Exploit-DB junto al nombre
- Argumento único: IP o hostname del objetivo
- Conecta al puerto
21/tcp(FTP) - Activa backdoor con usuario
user:) - Recibe shell en
6200/tcp - Ejecutar 2 veces si la primera no responde
/dev/null— Descarta el log de sesión (no guarda nada)-c bash— Ejecuta bash como shell dentro del script- Habilita Ctrl+C sin matar la conexión
- Necesario para tools interactivas (vim, sudo, etc.)
- Alternativa:
python3 -c 'import pty; pty.spawn("/bin/bash")'
- Requiere el archivo XML generado por
nmap -oX -o— Nombre del archivo HTML de salida- La stylesheet de Nmap está en
/usr/share/nmap/ - Útil para documentación e informes de pentest
-c <n>— Limita a n paquetes (evita loop infinito)-i <segundos>— Intervalo entre paquetes-s <bytes>— Tamaño del paquete ICMP- TTL recibido ≈ 64 → Linux/Unix
- TTL recibido ≈ 128 → Windows
// 06
Glosario
2.3.4 fue comprometida en julio de 2011 cuando un atacante desconocido logró modificar el código fuente en el repositorio oficial del proyecto, insertando una backdoor que activa una shell root al recibir el carácter ":)" en el campo de usuario durante el proceso de login FTP. Fue detectada y eliminada del repositorio en menos de 24 horas, pero las copias infectadas continuaron circulando y siendo usadas en sistemas sin actualizar. Este incidente sigue siendo uno de los ejemplos más citados de ataque a la cadena de suministro de software (supply chain attack).CVE-AÑO-NÚMERO. CVE-2011-2523 corresponde a la backdoor de vsftpd 2.3.4: el año 2011 indica cuándo fue descubierta y reportada, y el número 2523 es el índice secuencial asignado. El sistema CVE es mantenido por MITRE Corporation y financiado por el gobierno de EE.UU. a través de CISA. Bases de datos como NVD (National Vulnerability Database) y Exploit-DB indexan estas vulnerabilidades junto con puntuaciones de riesgo (CVSS), parches disponibles y exploits conocidos, siendo herramientas fundamentales en el ciclo de reconocimiento de un pentest.ftp-anon) permite acceso sin credenciales para distribución pública de archivos, aunque el error "OOPS: cannot change directory" observado en el escaneo indica que el FTP anónimo está habilitado pero mal configurado, lo que no impide la explotación de la backdoor.-oX) facilita la integración con otras herramientas del pipeline de pentest como Metasploit, que puede importar directamente los resultados para poblar su base de datos de hosts. En esta máquina, el script ftp-anon de Nmap intentó acceso anónimo al FTP automáticamente durante el escaneo con -sC.-m (mirror) copia el exploit al directorio actual, mientras que -p muestra solo la ruta del exploit. Cada exploit en Exploit-DB tiene un estado de verificación: Verified: True significa que el equipo ha probado el exploit en un entorno controlado y confirmado su funcionamiento. Es importante destacar que los exploits de Exploit-DB son herramientas de investigación y pruebas de seguridad — su uso fuera de entornos autorizados es ilegal.script /dev/null -c bash es la técnica más común para obtener una TTY estabilizada: script es una utilidad que graba sesiones de terminal, y al apuntarla a /dev/null descartamos el log; la opción -c bash le indica que el comando a ejecutar y registrar es una sesión bash interactiva, lo que fuerza la asignación de una pseudo-TTY.21/tcp → FTP, 22/tcp → SSH, 80/tcp → HTTP, 443/tcp → HTTPS. Los puertos 1024-49151 son registered ports para aplicaciones específicas, y los 49152-65535 son dynamic/private ports usados para conexiones efímeras. En el caso de vsftpd, la backdoor usa el puerto 6200/tcp, que no tiene asignación estándar — un puerto inusual escuchando en un servidor FTP sería una señal de alerta en un análisis forense. La enumeración completa de puertos (-p- en Nmap) es esencial en pentesting porque los servicios pueden correr en puertos no estándar deliberadamente para dificultar el reconocimiento básico.