# 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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://books.spartan-cybersec.com/cppj/networking-for-juniors/puertos-y-servicios/puerto-21-ftp.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
