20,21 - FTP
explotar servicio de transmisión de archivos FTP
Última actualización
explotar servicio de transmisión de archivos FTP
Última actualización
El Protocolo de transferencia de archivos (en inglés File Transfer Protocol o FTP) es un protocolo de red para la transferencia de archivos entre sistemas conectados a una red TCP , basado en la arquitectura cliente-servidor.
Desde un equipo cliente se puede conectar a un servidor para descargar archivos desde él o para enviarle archivos, independientemente del sistema operativo utilizado en cada equipo.
Funciona utilizando dos canales de datos:
Puerto 20 -> canal de datos.
Puerto 21 -> canal de control (tambien llamado comando).
Gracias a estos dos canales se pueden seguir mandando comandos al servidor sin tener que esperar a la carga o descarga de datos.
El mayor problema de este servicio es que toda la información se transmite en texto claro. Para ello se han desarrollado dos nuevos sistemas:
SFTP -> Utiliza el servicio SSH que es más seguro para la transferencia de datos. Solo utiliza el puerto 22 (SSH).
FTPS -> También conocido como FTP/SSL. Utiliza encriptación sobre el servicio FTP tradicional.
En una conexión activa el cliente FTP inicia la conexión de control desde el puerto N al puerto de comando del servidor FTP (puerto 21). El cliente entonces escucha en el puerto N+1 y le envía el puerto N+1 al servidor FTP. El servidor FTP entonces inicia la conexión de datos, desde su puerto M al puerto N+1 del cliente.
Si el cliente FTP tiene un firewall que controla las conexiones entrantes desde el exterior, la conexión activa puede ser un problema. Por eso se utiliza la conexión pasiva.
En una conexión pasiva el cliente inicia la conexión de control desde el puerto N al puerto 21 del servidor FTP. Después, el cliente envía un comando passv. El servidor entonces envía al cliente uno de sus números de puerto M. Entonces el cliente inicia la conexión de datos desde su puerto P a al puerto M del servidor FTP.
fuente: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/
Recordemos que el servicio FTPS utiliza SSL-TLS
Para esta enumeración se puede utilizar nmap con sus scripts por defecto:
Se pueden utilizar los comandos HELP, FEAT y STAT para obtener información sobre el servidor FTP.
Los credenciales para acceso anónimo pueden ser:
anonymous:anonymous
anonymous:
ftp:ftp
Podemos encontrar una lista con credenciales por defecto aquí:
Puedes conectarte a un servicio ftp a través del navegador con la siguiente URL:
Si la aplicación web está mandando datos controlados por el usuario directamente al servidor FTP (datos sin comprobar y sin depurar), puedes enviar en doble codificaciones URL los bytes %0d%0a
(en doble codificación esto es %250d%250a
) y conseguir que el servidor FTP se comporte de manera arbitraria.
Una de estas acciones arbitrarias es por ejemplo descargar contenido del servidor, realizar un escaneo de puertos o intentar hablar con otros servicios que se comunican en texto plano como por ejemplo http.
USER username
PASS password
HELP El servidor indica qué comandos soporta.
PORT 127,0,0,1,0,80 Esto indica al servidor FTP que establezca una conexión con la IP 127.0.0.1 por el puerto 80. Se debe poner el 5 puesto como 0 para poner en el 6 el puerto en decimal o utilizar los dos para inidicar el número de puerto en hexadecimal.
EPRT |2|127.0.0.1|80| Este comando indica al servidor FTP que establezca una conexión TCP (2) con la IP 127.0.0.1 por el puerto 80. Este comando soporta IPv6.
LIST Lista los archivos en la carpeta actual.
LIST -R Lista de manera recursiva (si lo permite el servidor)
APPE /path/something.txt Esto indica al servidor que almacene los datos recibidos de una conexón pasiva o de una PORT-EPRT en un archivo. Si el archivo ya existe, lo anexa al mismo.
STOR /path/something.txt Como APPE pero sobreescribe el archivo.
STOU /path/something.txt Como APPE pero si existe no hace nada.
RETR /path/to/file Si se realiza una conexión pasiva o por puerto, el servidor FTP mandará dicho archivo por la conexión.
REST 6 Le dice al servidor que la próxima vez que envíe algo con RETR, debe empezar por el 6 byte.
TYPE i Fija la transferencia en modo binario.
PASV Esto abre una conexioón pasiva e indica al usuario donde debe conectarse.
PUT /tmp/file.txt Sube un archivo al servidor FTP.
El servidor FTP FileZilla suele abrir el puerto 14147 para un servicio de administración de FileZilla-Server. Si puedes crear un túnel de tu máquina para acceder a este puerto, te puedes conectar con una contraseña en blanco y crear un nuevo usuario para el servicio FTP.
Los archivos de configuración de FTP son:
En el archivo vsftpd.conf se pueden activar algunas configuraciones muy peligrosas:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_root=/home/username/ftp - Directory for anonymous.
chown_uploads=YES - Change ownership of anonymously uploaded files
chown_username=username - User who is given ownership of anonymously uploaded files
local_enable=YES - Enable local users to login
no_anon_password=YES - Do not ask anonymous for password
write_enable=YES - Allow commands: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, and SITE