
Desbordamiento de búfer clásico basado en pila en War FTP Daemon 1.65 que demuestra la ejecución remota de código de la vieja escuela mediante comandos FTP malformados.
Desbordamiento de búfer basado en pila clásico en War FTP Daemon 1.65 que demuestra la ejecución remota de código de la vieja escuela mediante comandos FTP malformados.
Este repositorio forma parte del material que utilizo cuando enseño explotación de corrupción de memoria (además de mi trabajo habitual, también imparto cursos en diferentes formaciones de ciberseguridad donde ayudo a formar a la próxima generación de ingenieros inversos).
CVE-2007-1567 es un caso que utilizo justo después de introducir los conceptos básicos de las sobrescrituras de EIP clásicas. La explotación es limpia y directa, pero incluye un detalle que la hace un poco más interesante que un primer ejercicio típico: un carácter malo adicional que introduce el protocolo FTP y que los estudiantes deben identificar y tener en cuenta al construir su shellcode. Es una pequeña restricción, pero suficiente para hacer que los estudiantes piensen en lugar de simplemente copiar una técnica que ya utilizaron.
War FTP Daemon 1.65 es un servidor FTP de Windows heredado de finales de los años 90. La vulnerabilidad está en el controlador del comando USER, que usa sprintf para copiar la entrada controlada por el usuario en un búfer de pila de tamaño fijo sin validar su longitud. Lo que hace que este caso sea útil para la enseñanza:
War FTP Daemon es un servidor FTP para Windows escrito originalmente a finales de los años 90. Escucha en el puerto TCP 21 y gestiona comandos FTP estándar. La vulnerabilidad está en el controlador del comando USER, que procesa el nombre de usuario enviado por un cliente conectado mediante sprintf sin validación de longitud.
Detalles técnicos clave:
War FTP Daemon procesa el comando USER pasando el nombre de usuario proporcionado a sprintf, que lo copia en un búfer de pila de tamaño fijo sin comprobar su longitud. Una versión simplificada de la lógica vulnerable es la siguiente:
char buffer[256];
sprintf(buffer, "%sCRLF", username);
Enviar una cadena lo suficientemente larga como argumento USER hace que la copia escriba más allá del final del búfer, corrompiendo la pila hasta que se sobrescribe la dirección de retorno guardada. Cuando la función retorna, la CPU carga el valor controlado por el atacante desde la pila en EIP y salta a él.
La caída se puede reproducir enviando un argumento USER de gran tamaño a través de FTP. No se requiere autenticación. Ejemplo con Python:
import socket
HOST = '127.0.0.1'
PORT = 21
payload = b"A" * 700
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.recv(1024)
s.send(b"USER " + payload + b"\r\n")
s.close()
Cuando se ejecuta bajo un depurador, la caída muestra EIP sobrescrito con datos controlados por el usuario:
EIP = 41414141
lo que confirma que la dirección de retorno guardada ha sido corrompida por el desbordamiento.
El objetivo de este repositorio no es solo demostrar la caída, sino recorrer el proceso completo de explotación paso a paso, desde el fuzzing hasta una shell inversa funcional.
Para mantener el README principal limpio, las notas detalladas de explotación, los scripts y los pasos de depuración están ubicados en la carpeta Vulnerability 📂 de este repositorio.
Allí encontrarás el flujo de trabajo completo utilizado para explotar este CVE, incluyendo: