> For the complete documentation index, see [llms.txt](https://books.spartan-cybersec.com/cppj/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://books.spartan-cybersec.com/cppj/networking-for-juniors/puertos-y-servicios/puerto-21-ftp.md).

# Puerto 21: FTP

**FTP (File Transfer Protocol)** es un protocolo de red estándar utilizado para la transferencia de archivos entre un cliente y un servidor en una red TCP/IP. Opera sobre los puertos 20 y 21, donde el puerto 21 se utiliza para establecer la conexión de control y el puerto 20 para la transferencia de datos.

## <mark style="color:green;">Descripción de FTP</mark>

* <mark style="color:green;">**Protocolo**</mark><mark style="color:green;">:</mark> FTP funciona sobre el protocolo TCP, utilizando los puertos 20 y 21.
* <mark style="color:green;">**Transferencia de Archivos**</mark><mark style="color:green;">:</mark> Permite la transferencia de archivos entre computadoras, lo que incluye subir y descargar archivos.
* <mark style="color:green;">**Modos de Operación**</mark><mark style="color:green;">:</mark> Puede operar en modo activo o pasivo, determinando cómo se establecen las conexiones de datos.
* <mark style="color:green;">**Sin Cifrado**</mark><mark style="color:green;">:</mark> Por defecto, FTP no cifra los datos transmitidos, incluyendo nombres de usuario y contraseñas, lo que lo hace vulnerable a la interceptación.

## <mark style="color:green;">Relevancia en Pentesting</mark>

### <mark style="color:green;">**Inseguridad de FTP**</mark><mark style="color:green;">:</mark>

* <mark style="color:green;">**Transmisión en Texto Plano**</mark><mark style="color:green;">:</mark> Debido a que FTP transmite credenciales y datos sin cifrar, un atacante que intercepte el tráfico de red puede capturar esta información sensible.
* <mark style="color:green;">**Autenticación Débil**</mark><mark style="color:green;">:</mark> Muchos servidores FTP están configurados con credenciales predeterminadas o débiles, lo que facilita el acceso no autorizado.
* <mark style="color:green;">**Acceso Anónimo**</mark><mark style="color:green;">:</mark> Algunos servidores FTP permiten acceso anónimo, donde cualquier usuario puede conectarse sin necesidad de autenticación. Esto puede exponer archivos sensibles públicamente.
* <mark style="color:green;">**Exposición de Archivos Sensibles**</mark><mark style="color:green;">:</mark> Si no está configurado correctamente, FTP puede permitir el acceso a archivos críticos y confidenciales.

## <mark style="color:green;">Ejemplo de Escaneo de FTP con Nmap</mark>

Para identificar servidores FTP que pueden estar activos y verificar sus configuraciones, se puede utilizar Nmap. El siguiente comando escanea los puertos 21 y 20 (puertos predeterminados de FTP) y ejecuta scripts NSE para obtener más información sobre el servicio.

### <mark style="color:green;">**Comando Nmap**</mark>

```bash
nmap -p 21,20 --script ftp-anon,ftp-bounce,ftp-syst,ftp-brute target-ip-range
```

### <mark style="color:green;">**Explicación del Comando**</mark>

* `nmap`: Ejecuta el comando Nmap.
* `-p 21,20`: Especifica que Nmap debe escanear los puertos 21 y 20, los puertos predeterminados para FTP.
* `--script ftp-anon,ftp-bounce,ftp-syst,ftp-brute`: Utiliza scripts NSE para detectar configuraciones y vulnerabilidades en el servicio FTP.
  * `ftp-anon`: Verifica si el servidor FTP permite acceso anónimo.
  * `ftp-bounce`: Prueba si el servidor es vulnerable a ataques de rebote FTP.
  * `ftp-syst`: Recupera información del sistema desde el servidor FTP.
  * `ftp-brute`: Realiza un ataque de fuerza bruta para encontrar credenciales válidas.
* `target-ip-range`: Especifica el rango de direcciones IP que se deben escanear.

### <mark style="color:green;">**Ejemplo de Salida de Nmap**</mark>

```plaintext
Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-18 12:45 UTC
Nmap scan report for 192.168.1.15
Host is up (0.00042s latency).

PORT   STATE SERVICE
20/tcp open  ftp-data
21/tcp open  ftp
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst:
|   STAT:
|     FTP server status:
|      Connected to 192.168.1.100
|      Logged in as ftp
|      TYPE: ASCII
|      No session timeout
|      No data connection timeout
|      vsFTPd 3.0.3 - secure, fast, stable
|_    End of status
| ftp-bounce:
|   Bounce attack allowed
|_  Security Warning: FTP server allows bounce attacks.
|_ftp-brute: No valid credentials found (1 tested)

Nmap done: 1 IP address (1 host up) scanned in 3.42 seconds
```

### <mark style="color:green;">Interpretación de la Salida</mark>

* <mark style="color:green;">**Host is up**</mark><mark style="color:green;">:</mark> Indica que el sistema objetivo está en línea y responde.
* <mark style="color:green;">**20/tcp open ftp-data**</mark><mark style="color:green;">:</mark> El puerto 20 está abierto y se utiliza para la transferencia de datos FTP.
* <mark style="color:green;">**21/tcp open ftp**</mark><mark style="color:green;">:</mark> El puerto 21 está abierto y se utiliza para la conexión de control FTP.
* <mark style="color:green;">**ftp-anon**</mark><mark style="color:green;">:</mark> Indica que el acceso anónimo está permitido, lo que puede permitir a cualquier usuario conectarse sin autenticación.
* <mark style="color:green;">**ftp-syst**</mark><mark style="color:green;">:</mark> Proporciona información sobre el sistema del servidor FTP, incluyendo el tipo de servidor y configuraciones.
* <mark style="color:green;">**ftp-bounce**</mark><mark style="color:green;">:</mark> Señala que el servidor es vulnerable a ataques de rebote FTP, lo que puede permitir a un atacante utilizar el servidor para escanear otros sistemas.
* <mark style="color:green;">**ftp-brute**</mark><mark style="color:green;">:</mark> Intenta encontrar credenciales válidas mediante un ataque de fuerza bruta; en este caso, no se encontraron credenciales válidas.
