💻FTP
El File Transfer Protocol (FTP) es uno de los protocolos más antiguos de Internet. El FTP se ejecuta dentro de la capa de aplicación de la pila del protocolo TCP/IP.
Por lo tanto, está en la misma capa que HTTP
o POP
. Estos protocolos también funcionan con el soporte de navegadores o clientes de correo electrónico para realizar sus servicios. También existen programas FTP especiales para el Protocolo de transferencia de archivos.
Introducción
Imaginemos que queremos subir archivos locales a un servidor y descargar otros archivos mediante el protocolo FTP . En una conexión FTP se abren dos canales. Primero, el cliente y el servidor establecen un canal de control a través de TCP port 21
. El cliente envía comandos al servidor y el servidor devuelve códigos de estado. Entonces ambos participantes de la comunicación pueden establecer el canal de datos a través de TCP port 20
. Este canal se utiliza exclusivamente para la transmisión de datos y el protocolo vigila los errores durante este proceso. Si se interrumpe una conexión durante la transmisión, el transporte se puede reanudar después de restablecer el contacto.
Se hace una distinción entre enumeración activa
y pasiva
de FTP. En la variante activa, el cliente establece la conexión como se describe a través del puerto TCP 21 y así informa al servidor a través de qué puerto del cliente el servidor puede transmitir sus respuestas. Sin embargo, si un firewall protege al cliente, el servidor no puede responder porque todas las conexiones externas están bloqueadas. Para ello se ha desarrollado el passive mode
. Aquí, 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 conoce diferentes comandos y códigos de estado. No todos estos comandos se implementan de forma consistente en el servidor. Por ejemplo, el lado del cliente indica al lado del 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 implementó correctamente. Puede encontrar una lista de posibles códigos de estado aquí .
Normalmente, necesitamos credenciales para utilizar FTP en un servidor. También necesitamos saber que FTP es un clear-text
protocolo que a veces puede detectarse si las condiciones de la red son las adecuadas. Sin embargo, también existe la posibilidad que ofrece un servidor anonymous FTP
. Luego, el operador del servidor permite que cualquier usuario cargue o descargue archivos a través de FTP sin utilizar una contraseña. Dado que existen riesgos de seguridad asociados con un servidor FTP público de este tipo, las opciones para los usuarios suelen ser limitadas.
TFTP
Trivial File Transfer Protocol
( TFTP
) es más simple que FTP y realiza transferencias de archivos entre procesos de cliente y servidor. Sin embargo, no proporciona autenticación de usuario
y otras funciones valiosas compatibles con FTP. Además, mientras FTP usa TCP, TFTP usa UDP
, lo que lo convierte en un protocolo poco confiable y hace que use recuperación de capa de aplicación asistida por UDP.
Esto se refleja, por ejemplo, en el hecho de que TFTP, a diferencia de FTP, no requiere 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 lleva a que TFTP opere exclusivamente en directorios y con archivos que han sido compartidos con todos los usuarios y pueden leerse y escribirse globalmente. Debido a la falta de seguridad, TFTP, a diferencia de FTP, sólo puede utilizarse en redes locales y protegidas.
Echemos un vistazo a algunos comandos de TFTP
:
Comandos | Descripción |
| Establece el host remoto y, opcionalmente, el puerto para transferencias de archivos. |
| Transfiere un archivo o conjunto de archivos desde el host remoto al host local. |
| Transfiere un archivo o conjunto de archivos desde el host local al host remoto. |
| Sale de tftp. |
| 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. |
| 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 predeterminada
Uno de los servidores FTP más utilizados en distribuciones basadas en Linux es vsFTPd . La configuración predeterminada de vsFTPd se puede encontrar en /etc/vsftpd.conf
y algunas configuraciones ya están predefinidas de forma predeterminada. Se recomienda encarecidamente instalar el servidor vsFTPd en una máquina virtual y observar más de cerca esta configuración.
Instalar vsFTPd
El servidor vsFTPd es sólo uno de los pocos servidores FTP disponibles para nosotros. Existen muchas alternativas diferentes, que además traen consigo, entre otras cosas, muchas más funciones y opciones de configuración. Usaremos el servidor vsFTPd porque es una excelente manera de mostrar las posibilidades de configuración de un servidor FTP de una manera sencilla y fácil de entender sin entrar en los detalles de las páginas del manual. Si miramos el archivo de configuración de vsFTPd, veremos muchas opciones y configuraciones que están comentadas o no. Sin embargo, el archivo de configuración no contiene todas las configuraciones posibles que se pueden realizar. Los existentes y los que faltan se pueden encontrar en la página de manual .
Archivo de configuración vsFTPd
Configuración | Descripción |
| ¿Ejecutar desde inetd o como un demonio independiente? |
| ¿Escuchar en IPv6? |
| ¿Habilitar acceso anónimo? |
| ¿Permitir que los usuarios locales inicien sesión? |
| ¿Mostrar mensajes del directorio activo cuando los usuarios acceden a determinados directorios? |
| ¿Usar la hora local? |
| ¿Activar el registro de cargas/descargas? |
| ¿Conectar desde el puerto 20? |
| Nombre de un directorio vacío |
| Esta cadena es el nombre del servicio PAM que utilizará vsftpd. |
| Las últimas tres opciones especifican la ubicación del certificado RSA que se utilizará para conexiones cifradas SSL. |
| |
|
Además, hay un archivo llamado /etc/ftpusers
al que también debemos prestar atención, ya que este archivo se utiliza para denegar el acceso al servicio FTP a ciertos usuarios. En el siguiente ejemplo, los usuarios guest
, john
y kevin
no pueden iniciar sesión en el servicio FTP, incluso si existen en el sistema Linux.
ftpusers
Configuraciones peligrosas
Hay muchas configuraciones diferentes relacionadas con la seguridad que podemos realizar en cada servidor FTP. Estos pueden tener varios 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 las computadoras de los demás. Con vsFTPd, las configuraciones opcionales que se pueden agregar al archivo de configuración para el inicio de sesión anónimo tienen este aspecto:
Configuración | Descripción |
| ¿Permitir el inicio de sesión anónimo? |
| ¿Permitir que anónimo cargue archivos? |
| ¿Permitir que anónimo cree nuevos directorios? |
| ¿No pedir contraseña a un anónimo? |
| Directorio para anónimos. |
| ¿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 en consecuencia e iniciar sesión con el usuario anónimo si se han utilizado las configuraciones que se muestran arriba. El uso de la cuenta anónima puede ocurrir en entornos e infraestructuras internos donde todos los participantes son conocidos. El acceso a este tipo de servicio se puede configurar de forma temporal o con la configuración para acelerar el intercambio de archivos.
Tan pronto como nos conectamos al servidor vsFTPd, se muestra un response code 220
con el banner del servidor FTP. A menudo este banner contiene la descripción del mismo servicio e incluso la versión
del mismo. También nos indica qué tipo de sistema es el servidor FTP. Una de las configuraciones más comunes de los servidores FTP es permitir el acceso anonymous
, lo que no requiere credenciales legítimas pero proporciona acceso a algunos archivos. Aunque no podamos descargarlos, a veces basta con enumerar los contenidos para generar más ideas y anotar información que nos ayudará en otro enfoque.
Inicio de sesión anónimo
Sin embargo, para obtener una primera descripción general de la configuración del servidor, podemos usar el siguiente comando:
Estado vsFTPd
Algunos comandos conviene utilizarlos ocasionalmente, ya que estos harán que el servidor nos muestre más información que podemos utilizar para nuestros propósitos. Estos comandos incluyen debug
y trace
.
Salida detallada de vsFTPd
Configuración | Descripción |
| ¿Mostrar un mensaje cuando ingresan por primera vez a un nuevo directorio? |
| ¿Cambiar la propiedad de los archivos cargados de forma anónima? |
| Usuario al que se le otorga la propiedad de los archivos cargados de forma anónima. |
| ¿Permitir que los usuarios locales inicien sesión? |
| ¿Colocar a los usuarios locales en su directorio de inicio? |
| ¿Utilizar una lista de usuarios locales que se colocarán en su directorio de inicio? |
| Toda la información de usuarios y grupos en los listados de directorios se mostrará como "ftp". |
| Permite el uso de listados recurrentes. |
En el siguiente ejemplo, podemos ver que si la configuración hide_ids=YES
está presente, la representación UID y GUID del servicio se sobrescribirá, lo que nos hará más difícil identificar con qué derechos se escriben y cargan estos archivos.
hide_ids=YES
Esta configuración es una característica de seguridad para evitar que se revelen los nombres de usuario locales. Con los nombres de usuario, podríamos atacar servicios como FTP y SSH y muchos otros con un ataque de fuerza bruta en teoría. Sin embargo, en realidad, las soluciones fail2ban son ahora una implementación estándar de cualquier infraestructura que registra la dirección IP y bloquea todo acceso a la infraestructura después de una cierta cantidad de intentos fallidos de inicio de sesión.
Otra configuración útil que podemos utilizar para nuestros propósitos es ls_recurse_enable=YES
. Esto 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.
Listado recursivo
Descargar
los archivos de dicho servidor FTP son una de las características principales, así como subir
los archivos creados por nosotros. Esto nos permite, por ejemplo, utilizar vulnerabilidades LFI para hacer que el host ejecute comandos del sistema. Aparte de los archivos, podemos ver, descargar e inspeccionar. Los ataques también son posibles con los registros FTP, lo que lleva a Remote Command Execution
( RCE
). Esto se aplica a los servicios FTP y a todos aquellos que podamos detectar durante nuestra fase de enumeración.
Descargar un archivo
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 porque normalmente nadie de la empresa quiere descargar todos los archivos y contenidos de una vez.
Descargar todos los archivos disponibles
Una vez hayamos descargado todos los archivos, con wget
crearemos un directorio con el nombre de la dirección IP de nuestro objetivo. Todos los archivos descargados se almacenan allí, que luego podemos inspeccionar localmente.
A continuación, podemos comprobar si tenemos los permisos para subir archivos al servidor FTP. Especialmente con los servidores web, es común que los archivos se sincronicen y los desarrolladores tengan acceso rápido a los archivos. FTP se utiliza a menudo para este propósito y, la mayoría de las veces, los errores de configuración se encuentran en servidores que los administradores creen que no son detectables. La actitud de que no se puede acceder a los componentes internos de la red desde el exterior significa que a menudo se descuida el refuerzo de los sistemas internos y conduce a configuraciones erróneas.
La capacidad de cargar 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 tal vez incluso aumentar nuestros privilegios.
Cargar un archivo
Con el comando put
, podemos cargar archivos en la carpeta actual al servidor FTP.
Enumeración del servicio
La enumeración utilizando varios escáneres de red también es un método práctico y generalizado. Estas herramientas nos facilitan la identificación de diferentes servicios, incluso si no son accesibles en puertos estándar. Una de las herramientas más utilizadas para este fin es Nmap. Nmap también incluye Nmap Scripting Engine ( NSE
), un conjunto de muchos scripts diferentes escritos para servicios específicos. Puede encontrar más información sobre las capacidades de Nmap y NSE en el módulo Enumeración de redes con Nmap . Podemos actualizar esta base de datos de scripts NSE con el comando que se muestra.
Scripts FTP de Nmap
Todos los scripts NSE se encuentran en en /usr/share/nmap/scripts/
, pero en nuestros sistemas, podemos encontrarlos usando un comando simple en nuestro sistema.
Como ya sabemos, el servidor FTP suele ejecutarse en el puerto TCP estándar 21, que podemos escanear mediante Nmap. También utilizamos el escaneo de versión ( -sV
), el escaneo agresivo ( -A
) y el escaneo de script predeterminado ( -sC
) contra nuestro objetivo 10.129.14.136
.
Nmap
El escaneo de script predeterminado se basa en la enumeración, las respuestas y los puertos estándar de los servicios. Una vez que Nmap ha detectado el servicio, ejecuta los scripts marcados uno tras otro, proporcionando información diferente. Por ejemplo, el script ftp-anon NSE comprueba si el servidor FTP permite el acceso anónimo. Si es así, el contenido del directorio raíz FTP se representa para el usuario anónimo.
Scripts NSE para FTP
ftp-syst
por ejemplo, ejecuta el comando STAT
que muestra información sobre el estado del servidor FTP. Esto incluye configuraciones así como la versión del servidor FTP. Nmap también brinda la capacidad de rastrear el progreso de los scripts NSE a nivel de red si usamos la opción --script-trace
en nuestros escaneos. Esto nos permite ver qué comandos envía Nmap, qué puertos se utilizan y qué respuestas recibimos del servidor escaneado.
Seguimiento de script de Nmap
El historial de análisis muestra que se están ejecutando cuatro análisis paralelos diferentes en el servicio, con varios tiempos de espera. Para los scripts NSE, vemos que nuestra máquina local usa otros puertos de salida ( ,,, 54226
) y primero inicia la conexión con el comando.
Desde la primera respuesta del servidor, podemos ver que estamos recibiendo el banner del servidor en nuestro segundo script NSE ( ) del servidor FTP de destino. Si es necesario, por supuesto podemos utilizar otras aplicaciones como o para interactuar con el servidor FTP.
Interacción de servicio
Se ve ligeramente diferente si el servidor FTP se ejecuta con cifrado TLS/SSL. Porque entonces necesitamos un cliente que pueda manejar TLS/SSL. Para ello podemos utilizar el cliente openssl
y comunicarnos con el servidor FTP. Lo bueno de usar openssl
es que podemos ver el certificado SSL, lo que también puede ser de ayuda.
Esto se debe a que el certificado SSL nos permite reconocer el nombre del host
, por ejemplo, y en la mayoría de los casos también la dirección de email
de la organización o empresa. Además, si la empresa tiene varias ubicaciones en todo el mundo, también se pueden crear certificados para ubicaciones específicas, que también se pueden identificar mediante el certificado SSL.
Última actualización