👾Ataques a FTP
El Protocolo de transferencia de archivos ( FTP
) es un protocolo de red estándar que se utiliza para transferir archivos entre computadoras. También realiza operaciones de directorios y archivos, como cambiar el directorio de trabajo, enumerar archivos y cambiar el nombre y eliminar directorios o archivos. De forma predeterminada, FTP escucha en el puerto TCP/21
.
Para atacar un Servidor FTP podemos abusar de una mala configuración o de privilegios excesivos, explotar vulnerabilidades conocidas o descubrir nuevas vulnerabilidades. Por lo tanto, después de acceder al Servicio FTP, debemos conocer el contenido del directorio para poder buscar información sensible o crítica, como comentamos anteriormente.
El protocolo está diseñado para activar descargas y cargas con comandos. Por tanto, los archivos se pueden transferir entre servidores y clientes. Se pone a disposición del usuario un sistema de gestión de archivos, conocido por el sistema operativo. Los archivos se pueden almacenar en carpetas, que pueden estar ubicadas en otras carpetas. Esto da como resultado una estructura de directorios jerárquica. La mayoría de las empresas utilizan este servicio para procesos de desarrollo de software o sitios web.
Enumeración
Los scripts predeterminados -sC
de Nmap
incluyen el script ftp-anon. Nmap que comprueba si un servidor FTP permite inicios de sesión anónimos. El indicador de enumeración de versiones -sV
proporciona información interesante sobre los servicios FTP, como el banner FTP, que a menudo incluye el nombre de la versión. Podemos utilizar el cliente ftp
o nc
para interactuar con el servicio FTP. De forma predeterminada, FTP se ejecuta en el puerto TCP 21.
Nmap
Configuraciones erróneas
Como comentamos, la autenticación anónima se puede configurar para diferentes servicios como FTP. Para acceder con inicio de sesión anónimo, podemos utilizar el nombre de usuario anonymous
y sin contraseña. Esto será peligroso para la empresa si no se han configurado correctamente los permisos de lectura y escritura para el servicio FTP. Porque con el inicio de sesión anónimo, la empresa podría haber almacenado información confidencial en una carpeta a la que el usuario anónimo del servicio FTP podría tener acceso.
Esto nos permitiría descargar esta información confidencial o incluso cargar scripts peligrosos. Utilizando otras vulnerabilidades, como el recorrido de ruta en una aplicación web, podríamos averiguar dónde se encuentra este archivo y ejecutarlo como código PHP, por ejemplo.
Autenticación anónima
Una vez que obtengamos acceso a un servidor FTP con credenciales anónimas, podremos empezar a buscar información interesante. Podemos usar los comandos ls
y cd
para movernos por directorios como en Linux. Para descargar un solo archivo, usamos get
y para descargar varios archivos, podemos usar mget
. Para operaciones de carga, podemos usar put
para un archivo simple o mput
para múltiples archivos. Podemos utilizarlo help
en la sesión del cliente FTP para obtener más información.
En el módulo Enumeración, cubrimos información detallada sobre posibles configuraciones incorrectas de dichos servicios. Por ejemplo, se pueden aplicar muchas configuraciones diferentes a un servidor FTP, y algunas de ellas conducen a diferentes opciones que podrían provocar posibles ataques contra ese servicio. Sin embargo, este módulo se centrará en ataques específicos en lugar de encontrar configuraciones erróneas individuales.
Ataques específicos del protocolo
Muchos ataques y métodos diferentes se basan en protocolos. Sin embargo, es esencial tener en cuenta que no estamos atacando los protocolos individuales en sí, sino los servicios que los utilizan. Dado que existen decenas de servicios para un solo protocolo y procesan la información correspondiente de forma diferente, veremos algunos.
Fuerza bruta
Si no hay autenticación anónima disponible, también podemos forzar el inicio de sesión en los servicios FTP utilizando una lista de nombres de usuario y contraseñas generados previamente. Existen muchas herramientas diferentes para realizar un ataque de fuerza bruta. Exploremos uno de ellos, Medusa . Con Medusa
, podemos usar la opción -u
para especificar un único usuario al que apuntar, o puede usar la opción -U
para proporcionar un archivo con una lista de nombres de usuarios. La opción -P
es para un archivo que contiene una lista de contraseñas. Podemos usar la opción -M
y el protocolo al que nos dirigimos (FTP) y la opción -h
para el nombre de host o dirección IP de destino.
Nota: Aunque podemos encontrar servicios vulnerables a la fuerza bruta, la mayoría de las aplicaciones actuales previenen este tipo de ataques. Un método más eficaz es el Password Spraying
Fuerza bruta con Medusa
FTP Bounce Attack
Un ataque de rebote FTP es un ataque de red que utiliza servidores FTP para entregar tráfico saliente a otro dispositivo de la red. El atacante utiliza un PORT
comando para engañar a la conexión FTP para que ejecute comandos y obtenga información de un dispositivo distinto del servidor previsto.
Considere que estamos apuntando a un servidor FTP FTP_DMZ
expuesto a Internet. Otro dispositivo dentro de la misma red Internal_DMZ
no está expuesto a Internet. Podemos utilizar la conexión al FTP_DMZ
servidor para escanear Internal_DMZ
mediante el ataque FTP Bounce y obtener información sobre los puertos abiertos del servidor. Luego, podemos usar esa información como parte de nuestro ataque contra la infraestructura.
Con nmap podemos usar la opción -b
para realizar un ataque de rebote FTP:
Últimas vulnerabilidades FTP
Al analizar las vulnerabilidades más recientes, centraremos esta sección y las siguientes en uno de los ataques mostrados anteriormente y lo presentaremos de la manera más simple posible sin entrar en demasiados detalles técnicos. Esto debería ayudarnos a facilitar el concepto de ataque a través de un ejemplo relacionado con un servicio específico para lograr una mejor comprensión.
En este caso, discutiremos la vulnerabilidad CoreFTP before build 727
asignada al CVE-2022-22836 . Esta vulnerabilidad es para un servicio FTP que no procesa correctamente la solicitud HTTP PUT
y genera una vulnerabilidad authenticated directory
/ path traversal,
y arbitrary file write
. Esta vulnerabilidad nos permite escribir archivos fuera del directorio al que tiene acceso el servicio.
El concepto del ataque
Este servicio FTP utiliza una solicitud HTTP POST
para cargar archivos. Sin embargo, el servicio CoreFTP permite una PUT
solicitud HTTP, que podemos usar para escribir contenido en archivos. Echemos un vistazo al ataque según nuestro concepto. El exploit de este ataque es relativamente sencillo y se basa en un único cURL
comando.
Explotación CoreFTP
Creamos una PUT
solicitud HTTP sin formato ( -X PUT
) con autenticación básica ( --basic -u <username>:<password>
), la ruta del archivo ( --path-as-is https://<IP>/../../../../../whoops
) y su contenido ( --data-binary "PoC."
) con este comando. Además, especificamos el encabezado del host ( -H "Host: <IP>"
) con la dirección IP de nuestro sistema de destino.
El concepto de ataque
En resumen, el proceso real malinterpreta la entrada de la ruta por parte del usuario. Esto hace que se omita el acceso a la carpeta restringida. Como resultado, los permisos de escritura en la solicitud HTTP PUT
no están adecuadamente controlados, lo que lleva a que podamos crear los archivos que queramos fuera de las carpetas autorizadas. Sin embargo, nos saltaremos la explicación del proceso Basic Auth
y pasaremos directamente a la primera parte del exploit.
Recorrido del directorio
Paso | Recorrido del directorio | Concepto de ataques - Categoría |
| El usuario especifica el tipo de solicitud HTTP con el contenido del archivo, incluidos los caracteres de escape para salir del área restringida. |
|
| El proceso toma y procesa el tipo modificado de solicitud HTTP, el contenido del archivo y la ruta ingresada por el usuario. |
|
| La aplicación comprueba si el usuario está autorizado a estar en la ruta especificada. Dado que las restricciones solo se aplican a una carpeta específica, todos los permisos que se le otorgan se omiten cuando sale de esa carpeta mediante el recorrido del directorio. |
|
| El destino es otro proceso que tiene la tarea de escribir el contenido especificado del usuario en el sistema local. |
|
Hasta este punto, hemos omitido las restricciones impuestas por la aplicación usando los caracteres de escape ( ../../../../
) y llegamos a la segunda parte, donde el proceso escribe el contenido que especificamos en un archivo de nuestra elección. Aquí es cuando el ciclo comienza de nuevo, pero esta vez para escribir contenidos en el sistema de destino.
Escritura de archivos arbitrarios
Paso | Escritura de archivos arbitrarios | Concepto de ataques - Categoría |
| La misma información que el usuario ingresó se utiliza como fuente. En este caso, el nombre del archivo ( |
|
| El proceso toma la información especificada y procede a escribir el contenido deseado en el archivo especificado. |
|
| Dado que se omitieron todas las restricciones durante la vulnerabilidad de cruce de directorio, el servicio aprueba la escritura del contenido en el archivo especificado. |
|
| El nombre de archivo especificado por el usuario ( |
|
Una vez completada la tarea, podremos encontrar este archivo con el contenido correspondiente en el sistema de destino.
Objetivo del sistema
Caso práctico
Pregunta 1
¿En qué puerto se ejecuta el servicio FTP en el host?
Vemos que en este host el servicio FTP se ejecuta en el puerto 2121 en vez del puerto 21 que se suele utilizar para FTP.
Pregunta 2
¿Qué nombre de usuario está disponible para el servidor FTP?
Lo primero que vamos a probar es el login anonymous:
Funciona y conseguimos acceder a los archivos del servidor. Hay 2 listas de usuarios y contraseñas que nos vamos a descargar:
Tenemos 1 lista de usuarios y una lista de contraseñas, por lo que vamos a hacer bruteforce al servicio FTP. Por ver un ejemplo distinto al visto en esta sección, vamos a usar hydra:
Encontramos el usuario y contraseña:
Pregunta 3
Utiliza el nombre de usuario descubierto y su contraseña para iniciar sesión a través de SSH y obtener el archivo flag.txt. Envía el contenido como respuesta.
Última actualización