FTP (21)

FTP (File Transfer Protocol) es un protocolo de red diseñado para transferir archivos entre un cliente y un servidor a través de una red TCP/IP, como Internet.

1. Uso de FTP

# Conexión y autenticación
ftp 10.0.0.10 # Conectarse a un servidor FTP

# Navegación
ls            # Listar contenido del directorio actual
cd {dir}      # Cambiar de directorio remoto (en el FTP)
cdup          # Sube al directorio padre (como cd ..)
pwd           # Mostrar el directorio actual

# Transferencia
get {file}    # Descargar un archivo
mget *        # Descargar el contenido del directorio actual
put {file}    # Subir un archivo
mput *        # Subir todos los archivos del directorio actual

# Creación y eliminación
delete {file} # Elimina un archivo
mdelete *     # Elimina todos los archivos del directorio actual
mkdir {dir}   # Crea un nuevo directorio
rmdir {dir}   # Elimina un directorio
rename {old} {new}  # Renombra un archivo o directorio

# Finalización
quit          # Cerrar la sesión de FTP

2. Enumeración

Cuando encontramos un servicio de FTP podemos realizar una batería de pruebas con nmap para descubrir detalles importantes como

# - ftp-anon: conexión como usuario anónimo
# - ftp-syst: enumeración general
sudo nmap -p21 --script=ftp-anon,ftp-syst 10.0.0.10

# Pasar un escaneo de vulnerabilidades (usar categoría vuln)
# Esta pasa, entre otras, ftp-proftpd-backdoor (util si encontramos proftpd)
sudo nmap -p21 --script=vuln 10.0.0.10

# Escaneo de tipo y versión del servidor FTP
sudo nmap -sV -p21 10.0.0.10

3. Vulnerabilidades comunes

Una vez hemos lanzado un escaneo de tipo, versión y vulnerabilidades con nmap tendremos suficiente información para buscar posibles exploits. En este punto tenemos varias opciones, pero enumeraré las que más suelo utilizar.

NOTA: Es importante que SIEMPRE analices el funcionamiento de los exploits que utilices, especialmente en pruebas de pentración en entornos reales, ya que podríamos introducir malware en los sistemas que estemos testeando sin saberlo.

3.1 Búsqueda en searchsploit

Searchsploit es una herramienta de línea de comandos que permite buscar localmente en la base de datos de Exploit-DB vulnerabilidades conocidas, exploits y pruebas de concepto (PoCs), sin necesidad de conexión a internet.

En los términos de búsqueda introduciremos el tipo de servidor y la versión enumeradas con nmap con nmap -sV o nmap --script=ftp-syst, o bien el CVE si el nmap --script=vuln de nmap ha dectado algo.

Supongamos que hemos conseguido enumerar que se está usando Proftpd en su versión 1.3.X. Ejecutaremos el comando searchsploit con el parámetro -w para que si encuentra algo, nos de la URL de Exploit-DB y podamos consultar toda la información, descargar exploits y ver las instrucciones de uso.

searchsploit -w proftpd 1.3

3.2 Búsqueda en metasploit

Metasploit es una herramienta bien conocida que cuenta con numerosos exploits preconfigurados para vulnerabilidades comunes. Realizar una búsqueda en metasploit es sencillo y sobretodo, conveniente, ya que si existe el exploit dentro de la herramienta resultaría muy fácil de explotar (si se cumplen las condiciones).

sudo msfconsole -q # Iniciamos metasploit

# Dentro de metasploit buscamos por proftpd 1.3
msf> search proftpd 1.3

# En caso de encontrar algún exploit interesante, podemos seleccionarlo
# y explotarlo con la misma herramienta. Aquí no se explicará cómo se usa
# metasploit, pero puedes consultar la sección específica de la herramienta
# o seguir el tutorial oficial: https://www.offsec.com/metasploit-unleashed/

3.3 Búsqueda en Github

Una de las fuentes donde podemos encontrar más recursos para la explotación suele ser Github. En esta plataforma podemos encontrar miles de pruebas de concepto y exploits que podemos usar en nuestros CTF y pruebas de penetración. Muchas veces, y especialmente para vulnerabilidades más recientes, no encontraremos ningún exploit disponible en metasploit o Exploit-DB, por lo que este debe ser un recurso que debemos consultar siempre.

Para buscar en github podemos usar un Dork en el buscador de Google tan sencillo como el siguiente:

exploit proftpd 1.3 site:github.com

Nota: Si no encuentras nada útil en Github, amplía la búsqueda. Es posible que la vulnerabilidad haya sido documentada por una empresa de seguridad en su blog oficial, lo que te puede ayudar a entender cómo explotarla.

exploit proftpd 1.3

4. Fuerza bruta

La fuerza bruta es un ataque de debemos probar en última instancia, no como primer recurso, ya que genera gran cantidad de tráfico y sobrecarga en el servidor, lo que puede llevarlo a bloqueos o caídas si no son muy robustos. En laboratorios de CTF no suele ser un problema, pero en ejercicios de pentesting reales sí que es algo que debemos considerar cuidadosamente.

Disponemos de muchas alternativas, pero se mostrarán dos muy habituales, una con nmap y sus diccionarios internos y otra con hydra, la herramienta más empleada para este tipo de ataques y altamente configurable.

# Fuerza bruta básica con nmap
sudo nmap -p21 --script=ftp-brute 10.0.0.10

# Fuerza bruta con Hydra
# Primero instalamos los wordlists de Seclists
sudo apt update && sudo apt install seclists
# Ahora lanzamos hydra con dos diccionarios de Seclists
hydra -L /usr/share/wordlists/seclists/Usernames/top-usernames-shortlist.txt \
      -P /usr/share/wordlists/seclists/Passwords/xato-net-10-million-passwords-10000.txt \
      ftp://10.0.0.10

# Nota: en lugar de usar una wordlist de usuarios, es mejor crearla nosotros
# mismos para reducir al máximo las solicitudes. Ej. Solo usuarios como:
# admin, root, administrator, guest, ftp, user
#
# También es importante usar una wordlist de contraseñas reducida por ser
# un ataque que requiere solicitudes en red. No es recomendable usar listas
# extensas como rockyou o xato-net en su versión completa.

# Parámetros comunes de Hydra
# -s 3333: usar otro puerto distinto al por defecto del protocolo
# -t 4: número de hilos paralelos.
# -V: modo verboso, muestra cada intento.
# -f: detiene el ataque al encontrar una combinación válida.
# -L: prueba con una wordlist de nombres de usuario.
# -P: prueba con una wordlist de contraseñas.
# -l: prueba conn un nombre de usuario concreto
# -p: prueba con una contraseña en particular
# ftp://IP: objetivo, usando el protocolo FTP.
Usa el conocimiento para construir, no para destruir 🎓
Copiado al portapapeles
menu