FTP

El Protocolo de Transferencia de Archivos (FTP) es uno de los protocolos mΓ‘s antiguos de Internet. FTP opera en la capa de aplicaciΓ³n del modelo TCP/IP, al igual que HTTP o POP. Estos protocolos suelen funcionar con el soporte de navegadores o clientes de correo electrΓ³nico. TambiΓ©n existen programas especiales de FTP para utilizar este protocolo.

Imaginemos que queremos subir archivos locales a un servidor y descargar otros archivos utilizando FTP. En una conexiΓ³n FTP, se abren dos canales:

  1. Canal de control: Primero, el cliente y el servidor establecen un canal de control a travΓ©s del puerto TCP 21. El cliente envΓ­a comandos al servidor, y el servidor devuelve cΓ³digos de estado.

  2. Canal de datos: Posteriormente, ambos establecen un canal de datos a travΓ©s del puerto TCP 20 para la transmisiΓ³n exclusiva de datos. Este canal controla los errores durante la transferencia y permite reanudar la transmisiΓ³n en caso de que la conexiΓ³n se interrumpa.

Modos de FTP: Activo y Pasivo

  • FTP Activo: El cliente establece la conexiΓ³n a travΓ©s del puerto TCP 21 e informa al servidor sobre quΓ© puerto puede transmitir sus respuestas. Si el cliente estΓ‘ detrΓ‘s de un firewall, el servidor no puede responder porque las conexiones externas estΓ‘n bloqueadas.

  • FTP Pasivo: 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, el firewall no bloquea la transferencia.

Comandos y CΓ³digos de Estado en FTP

FTP utiliza diversos comandos y cΓ³digos de estado para comunicar acciones y resultados entre el cliente y el servidor. Algunos ejemplos incluyen la descarga y subida de archivos, organizaciΓ³n de directorios, o eliminaciΓ³n de archivos.

Seguridad en FTP

FTP es un protocolo en texto claro, lo que significa que la informaciΓ³n puede ser interceptada si las condiciones de la red lo permiten. TambiΓ©n existe la posibilidad de utilizar FTP anΓ³nimo, donde los usuarios pueden subir o descargar archivos sin autenticaciΓ³n. Sin embargo, esto tiene riesgos de seguridad, por lo que las opciones suelen ser limitadas en este tipo de servidores.

Protocolo de Transferencia de Archivos Trivial (TFTP)

El Protocolo de Transferencia de Archivos Trivial (TFTP) es mΓ‘s sencillo que FTP. TFTP no proporciona autenticaciΓ³n de usuarios ni otras funciones avanzadas. A diferencia de FTP, que utiliza TCP, TFTP utiliza UDP, lo que lo convierte en un protocolo menos fiable y depende de la capa de aplicaciΓ³n para la recuperaciΓ³n de errores.

CaracterΓ­sticas de TFTP

  • No requiere autenticaciΓ³n.

  • No admite inicios de sesiΓ³n protegidos por contraseΓ±a.

  • Se limita a archivos y directorios que estΓ‘n configurados para ser accesibles globalmente.

  • Es adecuado solo para redes locales y protegidas debido a la falta de seguridad.

Comandos en TFTP

A diferencia del cliente FTP, TFTP no tiene funcionalidad de listado de directorios.

ConfiguraciΓ³n por Defecto de vsFTPd

Uno de los servidores FTP mΓ‘s utilizados en distribuciones de Linux es vsFTPd. La configuraciΓ³n predeterminada se encuentra en /etc/vsftpd.conf.

InstalaciΓ³n de vsFTPd

sherlock28@htb[/htb]$ sudo apt install vsftpd

Archivo de ConfiguraciΓ³n de vsFTPd

A continuaciΓ³n, se muestran algunas de las configuraciones comunes de vsFTPd:

Archivo /etc/ftpusers

Este archivo contiene una lista de usuarios a los que se les niega el acceso al servicio FTP, incluso si existen en el sistema Linux:

sherlock28@htb[/htb]$ cat /etc/ftpusers
guest
john
kevin

Configuraciones Peligrosas

Existen muchas configuraciones relacionadas con la seguridad que podemos hacer en cada servidor FTP. Estas pueden tener diversos propΓ³sitos, como probar conexiones a travΓ©s de cortafuegos, probar rutas y mecanismos de autenticaciΓ³n. Uno de estos mecanismos de autenticaciΓ³n es el usuario anΓ³nimo. 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 se ven de la siguiente manera:

Con el cliente FTP estΓ‘ndar (ftp), podemos acceder al servidor FTP en consecuencia y iniciar sesiΓ³n como usuario anΓ³nimo si se han utilizado las configuraciones anteriores. 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 de manera temporal o con la finalidad de acelerar el intercambio de archivos.

Tan pronto como nos conectamos al servidor vsFTPd, se muestra el cΓ³digo de respuesta 220 con el banner del servidor FTP. A menudo, este banner contiene la descripciΓ³n del servicio e incluso su versiΓ³n, lo que nos puede ayudar a obtener mΓ‘s informaciΓ³n sobre el servidor y potenciales vulnerabilidades.

ConexiΓ³n AnΓ³nima

sherlock28@htb[/htb]$ ftp 10.129.14.136

Connected to 10.129.14.136.
220 "Welcome to the HTB Academy vsFTP service."
Name (10.129.14.136:cry0l1t3): anonymous

230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

DespuΓ©s de conectarnos como anΓ³nimos, podemos listar los archivos disponibles:

ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-rw-r--    1 1002     1002      8138592 Sep 14 16:54 Calender.pptx
drwxrwxr-x    2 1002     1002         4096 Sep 14 16:50 Clients
drwxrwxr-x    2 1002     1002         4096 Sep 14 16:50 Documents
drwxrwxr-x    2 1002     1002         4096 Sep 14 16:50 Employees
-rw-rw-r--    1 1002     1002           41 Sep 14 16:45 Important Notes.txt
226 Directory send OK.

Comando status

Podemos usar el comando status para obtener una vista general de las configuraciones del servidor:

ftp> status

Connected to 10.129.14.136.
No proxy connection.
Connecting using address family: any.
Mode: stream; Type: binary; Form: non-print; Structure: file
Verbose: on; Bell: off; Prompting: on; Globbing: on
Store unique: off; Receive unique: off
Case: off; CR stripping: on
Quote control characters: on
Ntrans: off
Nmap: off
Hash mark printing: off; Use of PORT cmds: on
Tick counter printing: off

El uso de comandos como debug y trace puede proporcionar informaciΓ³n detallada adicional que nos permita entender mejor la estructura y el comportamiento del servidor FTP.

Configuraciones Adicionales

Cuando el hide_ids=YES estΓ‘ activo, los UIDs y GIDs se muestran como "ftp", dificultando la identificaciΓ³n de los archivos.

ftp> ls
150 Here comes the directory listing.
-rw-rw-r--    1 ftp     ftp      8138592 Sep 14 16:54 Calender.pptx
drwxrwxr-x    2 ftp     ftp         4096 Sep 14 17:03 Clients
drwxrwxr-x    2 ftp     ftp         4096 Sep 14 16:50 Documents
drwxrwxr-x    2 ftp     ftp         4096 Sep 14 16:50 Employees
-rw-------    1 ftp     ftp            0 Sep 15 14:57 testupload.txt
226 Directory send OK.

El ajuste de ls_recurse_enable=YES permite listar de manera recursiva todas las carpetas y archivos visibles en el servidor FTP.

Ocultación de IDs - SÍ

ftp> ls
---> TYPE A
200 Switching to ASCII mode.
ftp: setsockopt (ignored): Permission denied
---> PORT 10,10,14,4,223,101
200 PORT command successful. Consider using PASV.
---> LIST
150 Here comes the directory listing.
-rw-rw-r--    1 ftp     ftp      8138592 Sep 14 16:54 Calender.pptx
drwxrwxr-x    2 ftp     ftp         4096 Sep 14 17:03 Clients
drwxrwxr-x    2 ftp     ftp         4096 Sep 14 16:50 Documents
drwxrwxr-x    2 ftp     ftp         4096 Sep 14 16:50 Employees
-rw-rw-r--    1 ftp     ftp           41 Sep 14 16:45 Important Notes.txt
-rw-------    1 ftp     ftp            0 Sep 15 14:57 testupload.txt
226 Directory send OK.

Esta configuraciΓ³n es una medida de seguridad para evitar que se revelen los nombres de usuario locales. Con los nombres de usuario, en teorΓ­a, se podrΓ­an lanzar ataques de fuerza bruta a servicios como FTP y SSH. Sin embargo, en la prΓ‘ctica, soluciones como fail2ban son un estΓ‘ndar que registra la direcciΓ³n IP y bloquea el acceso tras un nΓΊmero determinado de intentos fallidos.

Otra configuraciΓ³n ΓΊtil es ls_recurse_enable=YES, comΓΊnmente usada en servidores vsFTPd para tener una mejor vista de la estructura del directorio FTP, ya que permite ver todo el contenido visible de una sola vez.

Listado Recursivo

ftp> ls -R
---> PORT 10,10,14,4,222,149
200 PORT command successful. Consider using PASV.
---> LIST -R
150 Here comes the directory listing.
.:
-rw-rw-r--    1 ftp      ftp      8138592 Sep 14 16:54 Calender.pptx
drwxrwxr-x    2 ftp      ftp         4096 Sep 14 17:03 Clients
drwxrwxr-x    2 ftp      ftp         4096 Sep 14 16:50 Documents
drwxrwxr-x    2 ftp      ftp         4096 Sep 14 16:50 Employees
-rw-rw-r--    1 ftp      ftp           41 Sep 14 16:45 Important Notes.txt
-rw-------    1 ftp      ftp            0 Sep 15 14:57 testupload.txt

./Clients:
drwx------    2 ftp      ftp          4096 Sep 16 18:04 HackTheBox
drwxrwxrwx    2 ftp      ftp          4096 Sep 16 18:00 Inlanefreight

./Clients/HackTheBox:
-rw-r--r--    1 ftp      ftp         34872 Sep 16 18:04 appointments.xlsx
-rw-r--r--    1 ftp      ftp        498123 Sep 16 18:04 contract.docx
-rw-r--r--    1 ftp      ftp        478237 Sep 16 18:04 contract.pdf
-rw-r--r--    1 ftp      ftp           348 Sep 16 18:04 meetings.txt

./Clients/Inlanefreight:
-rw-r--r--    1 ftp      ftp         14211 Sep 16 18:00 appointments.xlsx
-rw-r--r--    1 ftp      ftp         37882 Sep 16 17:58 contract.docx
-rw-r--r--    1 ftp      ftp            89 Sep 16 17:58 meetings.txt
-rw-r--r--    1 ftp      ftp        483293 Sep 16 17:59 proposal.pptx

./Documents:
-rw-r--r--    1 ftp      ftp         23211 Sep 16 18:05 appointments-template.xlsx
-rw-r--r--    1 ftp      ftp         32521 Sep 16 18:05 contract-template.docx
-rw-r--r--    1 ftp      ftp        453312 Sep 16 18:05 contract-template.pdf

./Employees:
226 Directory send OK.

La descarga de archivos desde un servidor FTP es una de las principales funcionalidades, junto con la subida de archivos creados por nosotros. Esto nos permite, por ejemplo, aprovechar vulnerabilidades LFI (Local File Inclusion) para hacer que el servidor ejecute comandos del sistema.

Descargar un Archivo

FTP

ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rwxrwxrwx    1 ftp      ftp             0 Sep 16 17:24 Calendar.pptx
drwxrwxrwx    4 ftp      ftp          4096 Sep 16 17:57 Clients
drwxrwxrwx    2 ftp      ftp          4096 Sep 16 18:05 Documents
drwxrwxrwx    2 ftp      ftp          4096 Sep 16 17:24 Employees
-rwxrwxrwx    1 ftp      ftp            41 Sep 18 15:58 Important Notes.txt
226 Directory send OK.
ftp> get Important\ Notes.txt
local: Important Notes.txt remote: Important Notes.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for Important Notes.txt (41 bytes).
226 Transfer complete.
41 bytes received in 0.00 secs (606.6525 kB/s)
ftp> exit
sherlock28@htb[/htb]$ ls | grep Notes.txt
'Important Notes.txt'

TambiΓ©n podemos descargar todos los archivos y carpetas a las que tenemos acceso de una sola vez, lo cual es ΓΊtil si el servidor FTP tiene una estructura grande de archivos. Sin embargo, esto podrΓ­a activar alarmas porque, en general, nadie en la empresa descargarΓ­a todo el contenido de una sola vez.

Descargar Todos los Archivos Disponibles

sherlock28@htb[/htb]$ wget -m --no-passive ftp://anonymous:anonymous@10.129.14.136
--2021-09-19 14:45:58--  ftp://anonymous:*password*@10.129.14.136/                                         
           => β€˜10.129.14.136/.listing’                                                                     
Connecting to 10.129.14.136:21... connected.                                                               
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD not needed.
==> PORT ... done.    ==> LIST ... done.                                                                 
12.12.1.136/.listing           [ <=>                                  ]     466  --.-KB/s    in 0s       
                                                                                                         
2021-09-19 14:45:58 (65,8 MB/s) - β€˜10.129.14.136/.listing’ saved [466]                                     
--2021-09-19 14:45:58--  ftp://anonymous:*password*@10.129.14.136/Calendar.pptx   
           => β€˜10.129.14.136/Calendar.pptx’                                       
==> CWD not required.                                                           
==> SIZE Calendar.pptx ... done.                                                                                                                            
==> PORT ... done.    ==> RETR Calendar.pptx ... done.

Una vez que se han descargado todos los archivos, wget crearΓ‘ un directorio con el nombre de la direcciΓ³n IP del objetivo. AllΓ­ se almacenarΓ‘n todos los archivos descargados, que podremos inspeccionar localmente.

Estructura de Archivos Descargados

sherlock28@htb[/htb]$ tree .
plaintextCopiar cΓ³digo.
└── 10.129.14.136
    β”œβ”€β”€ Calendar.pptx
    β”œβ”€β”€ Clients
    β”‚   └── Inlanefreight
    β”‚       β”œβ”€β”€ appointments.xlsx
    β”‚       β”œβ”€β”€ contract.docx
    β”‚       β”œβ”€β”€ meetings.txt
    β”‚       └── proposal.pptx
    β”œβ”€β”€ Documents
    β”‚   β”œβ”€β”€ appointments-template.xlsx
    β”‚   β”œβ”€β”€ contract-template.docx
    β”‚   └── contract-template.pdf
    β”œβ”€β”€ Employees
    └── Important Notes.txt
5 directories, 9 files

Subir un Archivo

sherlock28@htb[/htb]$ touch testupload.txt

Con el comando PUT, podemos subir archivos desde la carpeta actual al servidor FTP.

ftp> put testupload.txt 

local: testupload.txt remote: testupload.txt
---> PORT 10,10,14,4,184,33
200 PORT command successful. Consider using PASV.
---> STOR testupload.txt
150 Ok to send data.
226 Transfer complete.

Verificamos el archivo subido:

ftp> ls

---> TYPE A
200 Switching to ASCII mode.
---> PORT 10,10,14,4,223,101
200 PORT command successful. Consider using PASV.
---> LIST
150 Here comes the directory listing.
-rw-rw-r--    1 1002     1002      8138592 Sep 14 16:54 Calender.pptx
drwxrwxr-x    2 1002     1002         4096 Sep 14 17:03 Clients
drwxrwxr-x    2 1002     1002         4096 Sep 14 16:50 Documents
drwxrwxr-x    2 1002     1002         4096 Sep 14 16:50 Employees
-rw-rw-r--    1 1002     1002           41 Sep 14 16:45 Important Notes.txt
-rw-------    1 1002     133             0 Sep 15 14:57 testupload.txt
226 Directory send OK.

Footprinting the Service

El footprinting con herramientas de escaneo de red es una tΓ©cnica comΓΊn para identificar servicios, incluso si no estΓ‘n accesibles en puertos estΓ‘ndar. Una de las herramientas mΓ‘s usadas es Nmap, que incluye el motor de scripting NSE para anΓ‘lisis avanzados.

Podemos actualizar la base de datos de scripts NSE con el siguiente comando:

sherlock28@htb[/htb]$ sudo nmap --script-updatedb

Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-19 13:49 CEST
NSE: Updating rule database.
NSE: Script Database updated successfully.
Nmap done: 0 IP addresses (0 hosts up) scanned in 0.28 seconds

Para buscar los scripts relacionados con FTP en nuestro sistema, usamos:

sherlock28@htb[/htb]$ find / -type f -name ftp* 2>/dev/null | grep scripts

/usr/share/nmap/scripts/ftp-syst.nse
/usr/share/nmap/scripts/ftp-vsftpd-backdoor.nse
/usr/share/nmap/scripts/ftp-vuln-cve2010-4221.nse
/usr/share/nmap/scripts/ftp-proftpd-backdoor.nse
/usr/share/nmap/scripts/ftp-bounce.nse
/usr/share/nmap/scripts/ftp-libopie.nse
/usr/share/nmap/scripts/ftp-anon.nse
/usr/share/nmap/scripts/ftp-brute.nse

Ya que el servidor FTP suele correr en el puerto TCP 21, realizamos un escaneo de Nmap:

Nmap

sherlock28@htb[/htb]$ sudo nmap -sV -p21 -sC -A 10.129.14.136

Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-16 18:12 CEST
Nmap scan report for 10.129.14.136
Host is up (0.00013s latency).

PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 2.0.8 or later
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rwxrwxrwx    1 ftp      ftp       8138592 Sep 16 17:24 Calendar.pptx [NSE: writeable]
| drwxrwxrwx    4 ftp      ftp          4096 Sep 16 17:57 Clients [NSE: writeable]
| drwxrwxrwx    2 ftp      ftp          4096 Sep 16 18:05 Documents [NSE: writeable]
| drwxrwxrwx    2 ftp      ftp          4096 Sep 16 17:24 Employees [NSE: writeable]
| -rwxrwxrwx    1 ftp      ftp            41 Sep 16 17:24 Important Notes.txt [NSE: writeable]
|_-rwxrwxrwx    1 ftp      ftp             0 Sep 15 14:57 testupload.txt [NSE: writeable]
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to 10.10.14.4
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 2
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status

Este anΓ‘lisis muestra si el acceso FTP anΓ³nimo estΓ‘ permitido, ademΓ‘s de otras configuraciones del servidor.

Para ver los comandos enviados y las respuestas del servidor, podemos usar el siguiente comando con script-trace:

Nmap con script-trace

sherlock28@htb[/htb]$ sudo nmap -sV -p21 -sC -A 10.129.14.136 --script-trace

Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-19 13:54 CEST
NSOCK INFO [11.4640s] nsock_trace_handler_callback(): Callback: CONNECT SUCCESS for EID 8 [10.129.14.136:21]
NSOCK INFO [11.4640s] nsock_read(): Read request from IOD #2 [10.129.14.136:21] (timeout: 9000ms) EID 50
NSE: TCP 10.10.14.4:54228 < 10.129.14.136:21 | 220 Welcome to HTB-Academy FTP service.

El historial del escaneo muestra mΓΊltiples conexiones paralelas al servicio.

InteracciΓ³n con el Servicio

Para interactuar con el servidor FTP, podemos usar netcat o telnet:

sherlock28@htb[/htb]$ nc -nv 10.129.14.136 21

sherlock28@htb[/htb]$ telnet 10.129.14.136 21

Si el servidor FTP usa TLS/SSL, podemos usar openssl para la conexiΓ³n:

sherlock28@htb[/htb]$ openssl s_client -connect 10.129.14.136:21 -starttls ftp

CONNECTED(00000003)
Can't use SSL_get_servername
depth=0 C = US, ST = California, L = Sacramento, O = Inlanefreight, OU = Dev, CN = master.inlanefreight.htb, emailAddress = admin@inlanefreight.htb
verify error:num=18:self signed certificate
verify return:1

El certificado SSL puede revelar informaciΓ³n ΓΊtil, como el nombre de la organizaciΓ³n o un correo electrΓ³nico.

Last updated