File Transfer Protocol (FTP) fue desarrollado para hacer eficiente la transferencia de archivos entre ordenadores con diferentes sistemas.
FTP también manda y recibe la información en texto plano, por lo que también podemos usar Telnet (o Netcat) para comunicarnos con el servidor FTP y actuar como cliente FTP.
- Nos conectamos al servidor FTP usando Telnet. El servidor de FTP escucha en el puerto 21.
- Damos el nombre de usuario con
USER frank - Damos la contraseña con
PASS D2xc9CgD. - Como introdujimos datos correctos nos logueamos.
El comando STAT puede darnos información extra. El comando SYST nos muestra el tipo de sistema del objetivo. El comando PASV cambia el modo a pasivo. Es imprescindible saber que hay dos modos para FTP:
- Active: La información se manda a través de un canal separado que se origina desde el puerto 20 del servidor.
- Passive: La información se manda por un canal separado que se origina desde el puerto por encima del 1023 del cliente.
El comando TYPE A cambia el modo de transferencia de archivos a ASCII mientras que TYPE I lo cambia a binario. Sin embargo, no podemos transferir archivos usando clientes simples como Telnet porque FTP crea un canal nuevo para ello.
pentester@TryHackMe$ telnet 10.80.185.10 21 Trying 10.80.185.10... Connected to 10.80.185.10. Escape character is '^]'. 220 (vsFTPd 3.0.3) USER frank 331 Please specify the password. PASS D2xc9CgD 230 Login successful. SYST 215 UNIX Type: L8 PASV 227 Entering Passive Mode (10,10,0,148,78,223). TYPE A 200 Switching to ASCII mode. STAT 211-FTP server status: Connected to ::ffff:10.10.0.1 Logged in as frank 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 1 vsFTPd 3.0.3 - secure, fast, stable 211 End of status QUIT 221 Goodbye. Connection closed by foreign host.
La imagen de abajo muestra cómo una transferencia de archivos real tomaría lugar usando FTP.

Debido a la complejidad de FTP para recibir archivos, vamos a usar un cliente FTP para hacer una transferencia real. Aquí podemos ver que los comandos cambian respecto a Telnet, pero el principio detrás de ellos es el mismo.
pentester@TryHackMe$ ftp 10.80.185.10 Connected to 10.80.185.10. 220 (vsFTPd 3.0.3) Name: frank 331 Please specify the password. Password: D2xc9CgD 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 227 Entering Passive Mode (10,20,30,148,201,180). 150 Here comes the directory listing. -rw-rw-r-- 1 1001 1001 4006 Sep 15 10:27 README.txt 226 Directory send OK. ftp> ascii 200 Switching to ASCII mode. ftp> get README.txt local: README.txt remote: README.txt 227 Entering Passive Mode (10,10,0,148,125,55). 150 Opening BINARY mode data connection for README.txt (4006 bytes). WARNING! 9 bare linefeeds received in ASCII mode File may not have transferred correctly. 226 Transfer complete. 4006 bytes received in 0.000269 secs (14892.19 Kbytes/sec) ftp> exit 221 Goodbye.
Hay varios software de servidor FTP que puedes seleccionar como:
Para clientes FTP, además de la consola FTP del cliente normalmente encontrada en sistemas Linux, puedes usar clientes FTP con GUI como FileZilla. Algunos navegadores web también lo soportan.
Gracias a que FTP manda las credenciales de login junto con los comandos y archivos en texto plano, el tráfico FTP puede ser fácil de interceptar para los atacantes.
