FTP
Last updated
Last updated
El protocolo File Transfer Protocol
( FTP
) es uno de los más antiguos de Internet. El FTP se ejecuta en la capa de aplicación de la pila de protocolos TCP/IP. Por lo tanto, se encuentra en la misma capa que HTTP
o POP
. Estos protocolos también funcionan con la ayuda de navegadores o clientes de correo electrónico para realizar sus servicios. Asimismo, existen programas FTP especiales para el Protocolo de Transferencia de Archivos (TFTP).
Imaginemos que queremos subir archivos locales a un servidor y descargar otros mediante el protocolo . En una conexión FTP, se abren dos canales. Primero, el cliente y el servidor establecen un canal de control a través de [nombre del TCP port 21
servidor]. El cliente envía comandos al servidor, y este devuelve códigos de estado. A continuación, ambos participantes de la comunicación pueden establecer el canal de datos a través de [nombre del TCP port 20
servidor]. Este canal se utiliza exclusivamente para la transmisión de datos, y el protocolo detecta errores durante este proceso. Si se interrumpe la conexión durante la transmisión, el transporte puede reanudarse tras restablecerse el contacto.
Se distingue entre FTP active
y passive
FTP. En la variante activa, el cliente establece la conexión, como se describe, a través del puerto TCP 21 e informa al servidor a través del cual puede transmitir sus respuestas. Sin embargo, si un firewall protege al cliente, este no puede responder porque todas las conexiones externas están bloqueadas. Para ello, passive mode
se ha desarrollado [el método]. En este método, el servidor anuncia un puerto a través del cual el cliente puede establecer el canal de datos. Dado que el cliente inicia la conexión con este método, el firewall no bloquea la transferencia.
El FTP reconoce diferentes y códigos de estado. No todos estos comandos se implementan de forma coherente en el servidor. Por ejemplo, el cliente indica al servidor que cargue o descargue archivos, organice directorios o elimine archivos. El servidor responde en cada caso con un código de estado que indica si el comando se ejecutó correctamente. Puede encontrar una lista de posibles códigos de estado .
Normalmente, necesitamos credenciales para usar FTP en un servidor. También debemos saber que FTP es un clear-text
protocolo que a veces puede ser interceptado si las condiciones de la red son las adecuadas. Sin embargo, también existe la posibilidad de que un servidor ofrezca [falta contexto] anonymous FTP
. El operador del servidor permite entonces a cualquier usuario subir o descargar archivos a través de FTP sin usar contraseña. Dados los riesgos de seguridad asociados con un servidor FTP público de este tipo, las opciones para los usuarios suelen ser limitadas.
Trivial File Transfer Protocol
( TFTP
) es más simple que FTP y realiza transferencias de archivos entre procesos cliente y servidor. Sin embargo, does not
proporciona autenticación de usuarios y otras funciones valiosas compatibles con FTP. Además, mientras que FTP usa TCP, TFTP usa UDP
, lo que lo convierte en un protocolo poco fiable y obliga a utilizar la recuperación de la capa de aplicación asistida por UDP.
Esto se refleja, por ejemplo, en que TFTP, a diferencia de FTP, no requiere la autenticación del usuario. No admite el inicio de sesión protegido mediante contraseñas y establece límites de acceso basados únicamente en los permisos de lectura y escritura de un archivo en el sistema operativo. En la práctica, esto implica que TFTP opera exclusivamente en directorios y archivos compartidos con todos los usuarios, con capacidad de lectura y escritura global. Debido a su falta de seguridad, TFTP, a diferencia de FTP, solo puede utilizarse en redes locales y protegidas.
Echemos un vistazo a algunos comandos de TFTP
:
Comandos
Descripción
connect
Establece el host remoto y, opcionalmente, el puerto, para transferencias de archivos.
get
Transfiere un archivo o un conjunto de archivos desde el host remoto al host local.
put
Transfiere un archivo o un conjunto de archivos desde el host local al host remoto.
quit
Sale del tftp.
status
Muestra el estado actual de tftp, incluido el modo de transferencia actual (ascii o binario), el estado de la conexión, el valor de tiempo de espera, etc.
verbose
Activa o desactiva el modo detallado, que muestra información adicional durante la transferencia de archivos.
A diferencia del cliente FTP, TFTP
no tiene funcionalidad de listado de directorios.
Configuración
Descripción
listen=NO
¿Ejecutar desde inetd o como un demonio independiente?
listen_ipv6=YES
¿Escuchar en IPv6?
anonymous_enable=NO
¿Habilitar el acceso anónimo?
local_enable=YES
¿Permitir que usuarios locales inicien sesión?
dirmessage_enable=YES
¿Mostrar mensajes del directorio activo cuando los usuarios acceden a determinados directorios?
use_localtime=YES
¿Utilizar hora local?
xferlog_enable=YES
¿Activar el registro de cargas/descargas?
connect_from_port_20=YES
¿Conectarse desde el puerto 20?
secure_chroot_dir=/var/run/vsftpd/empty
Nombre de un directorio vacío
pam_service_name=vsftpd
Esta cadena es el nombre del servicio PAM que utilizará vsftpd.
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
Las últimas tres opciones especifican la ubicación del certificado RSA que se utilizará para las conexiones cifradas SSL.
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
Además, hay un archivo llamado /etc/ftpusers
al que también debemos prestar atención, ya que se utiliza para denegar el acceso al servicio FTP a ciertos usuarios.
Configuración
Descripción
anonymous_enable=YES
¿Permitir inicio de sesión anónimo?
anon_upload_enable=YES
¿Permitir que usuarios anónimos carguen archivos?
anon_mkdir_write_enable=YES
¿Permitir que usuarios anónimos creen nuevos directorios?
no_anon_password=YES
¿No pedir contraseña anónima?
anon_root=/home/username/ftp
Directorio para anónimos.
write_enable=YES
¿Permitir el uso de comandos FTP: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE y SITE?
Con el cliente FTP estándar ( ftp
), podemos acceder al servidor FTP e iniciar sesión con el usuario anónimo si se ha utilizado la configuración anterior. El uso de la cuenta anónima puede darse en entornos e infraestructuras internas donde todos los participantes son conocidos. El acceso a este tipo de servicio puede configurarse temporalmente o mediante la configuración para acelerar el intercambio de archivos.
Al conectarnos al servidor vsFTPd, response code 220
se muestra el banner del servidor FTP. Este banner suele contener la descripción del servidor service
e incluso version
su nombre. También indica el tipo de sistema del servidor FTP. Una de las configuraciones más comunes de los servidores FTP es permitir anonymous
el acceso, lo cual no requiere credenciales legítimas, pero proporciona acceso a algunos archivos. Incluso si no podemos descargarlos, a veces basta con listar el contenido para generar nuevas ideas y anotar información que nos ayudará en otro enfoque.
Otra configuración útil que podemos usar para nuestros fines es ls_recurse_enable=YES
. Esta suele configurarse en el servidor vsFTPd para tener una mejor visión general de la estructura del directorio FTP, ya que nos permite ver todo el contenido visible a la vez.
Downloading
Los archivos de dicho servidor FTP son una de las principales características, así como uploading
los archivos creados por nosotros. Esto nos permite, por ejemplo, usar vulnerabilidades LFI para que el host ejecute comandos del sistema. Además de los archivos, podemos ver, descargar e inspeccionar. Los ataques también son posibles con los registros FTP, lo que genera Remote Command Execution
( RCE
). Esto se aplica a los servicios FTP y a todos aquellos que podamos detectar durante nuestra fase de enumeración.
También podemos descargar todos los archivos y carpetas a los que tenemos acceso a la vez. Esto es especialmente útil si el servidor FTP tiene muchos archivos diferentes en una estructura de carpetas más grande. Sin embargo, esto puede generar alarmas, ya que nadie en la empresa suele querer descargar todos los archivos y el contenido a la vez.
Una vez descargados todos los archivos, wget
se creará un directorio con la dirección IP de nuestro objetivo. Todos los archivos descargados se almacenan allí, y luego podemos inspeccionarlos localmente.
A continuación, podemos comprobar si tenemos los permisos para subir archivos al servidor FTP. Especialmente en servidores web, es común que los archivos estén sincronizados y que los desarrolladores tengan acceso rápido a ellos. El FTP se usa a menudo para este fin, y la mayoría de las veces, se encuentran errores de configuración en servidores que los administradores consideran indetectables. La inaccesibilidad a los componentes internos de la red desde el exterior implica que a menudo se descuida el refuerzo de los sistemas internos, lo que provoca configuraciones incorrectas.
La capacidad de subir archivos al servidor FTP conectado a un servidor web aumenta la probabilidad de obtener acceso directo al servidor web e incluso a un shell inverso que nos permite ejecutar comandos internos del sistema y quizás incluso escalar nuestros privilegios.
Como ya sabemos, el servidor FTP suele ejecutarse en el puerto TCP estándar 21, que podemos escanear con Nmap. También utilizamos el escaneo de versiones ( -sV
), el escaneo agresivo ( -A
) y el escaneo de script predeterminado ( -sC
) contra nuestro objetivo 10.129.14.136
.
ftp-syst
Por ejemplo, el comando ejecuta el STAT
comando, que muestra información sobre el estado del servidor FTP. Esto incluye tanto la configuración como la versión del servidor FTP. Nmap también permite rastrear el progreso de los scripts NSE a nivel de red si usamos esta --script-trace
opción en nuestros análisis. Esto nos permite ver qué comandos envía Nmap, qué puertos se utilizan y qué respuestas recibimos del servidor analizado.
El historial de escaneos muestra que se están ejecutando cuatro escaneos paralelos diferentes contra el servicio, con diferentes tiempos de espera. Para los scripts NSE, observamos que nuestra máquina local usa otros puertos de salida ( 54226
, 54228
, 54230
, 54232
) e inicia primero la conexión con el CONNECT
comando. A partir de la primera respuesta del servidor, podemos ver que recibimos el banner del servidor a nuestro segundo script NSE ( 54228
) desde el servidor FTP de destino. Si es necesario, podemos usar otras aplicaciones como netcat
o telnet
para interactuar con el servidor FTP.
La situación es ligeramente diferente si el servidor FTP utiliza cifrado TLS/SSL. En ese caso, necesitamos un cliente compatible con TLS/SSL. Para ello, podemos usar el cliente openssl
y comunicarnos con el servidor FTP. La ventaja de usar este protocolo openssl
es que podemos ver el certificado SSL, lo cual también puede ser útil.
Esto se debe a que el certificado SSL nos permite reconocer hostname
, por ejemplo, el [nombre de la organización o empresa] y, en la mayoría de los casos, también el [nombre email address
de la organización o empresa]. Además, si la empresa tiene varias sedes en todo el mundo, también se pueden crear certificados para ubicaciones específicas, que también se pueden identificar mediante el certificado SSL.
Uno de los servidores FTP más utilizados en distribuciones Linux es . La configuración predeterminada de vsFTPd se encuentra en [nombre /etc/vsftpd.conf
del servidor] y algunas opciones ya están predefinidas. Se recomienda instalar el servidor vsFTPd en una máquina virtual y analizar esta configuración con más detalle.
El servidor vsFTPd es solo uno de los pocos servidores FTP disponibles. Existen muchas alternativas, que además ofrecen, entre otras cosas, muchas más funciones y opciones de configuración. Usaremos vsFTPd porque es una excelente manera de mostrar las posibilidades de configuración de un servidor FTP de forma sencilla y fácil de entender, sin entrar en detalles de las páginas de manual. Si revisamos el archivo de configuración de vsFTPd, veremos muchas opciones y configuraciones comentadas o no. Sin embargo, el archivo de configuración no contiene todas las opciones de configuración posibles. Las existentes y las que faltan se pueden encontrar en la .
Existen diversas configuraciones de seguridad que podemos configurar en cada servidor FTP. Estas pueden tener diversos propósitos, como probar conexiones a través de firewalls, probar rutas y mecanismos de autenticación. Uno de estos mecanismos de autenticación es el anonymous
usuario. Esto se utiliza a menudo para permitir que todos en la red interna compartan archivos y datos sin acceder a los equipos de los demás. Con vsFTPd, las que se pueden agregar al archivo de configuración para el inicio de sesión anónimo son las siguientes:
Esta configuración es una función de seguridad que impide que se revelen los nombres de usuario locales. Con estos nombres de usuario, en teoría podríamos atacar servicios como FTP, SSH y muchos otros con un ataque de fuerza bruta. Sin embargo, en la práctica, las soluciones son ahora una implementación estándar de cualquier infraestructura que registra la dirección IP y bloquea todo acceso a la infraestructura tras un cierto número de intentos fallidos de inicio de sesión.
El uso de diversos escáneres de red también es un método práctico y extendido. Estas herramientas facilitan la identificación de diferentes servicios, incluso si no son accesibles en los puertos estándar. Una de las herramientas más utilizadas para este propósito es Nmap. Nmap también incluye el ( NSE
), un conjunto de numerosos scripts diferentes escritos para servicios específicos. Puede encontrar más información sobre las capacidades de Nmap y NSE en el módulo . Podemos actualizar esta base de datos de scripts de NSE con el comando mostrado.
El análisis predeterminado de scripts se basa en las huellas digitales, las respuestas y los puertos estándar de los servicios. Una vez que Nmap detecta el servicio, ejecuta los scripts marcados uno tras otro, proporcionando información diversa. Por ejemplo, el script NSE comprueba si el servidor FTP permite el acceso anónimo. De ser así, se muestra el contenido del directorio raíz del FTP para el usuario anónimo.