# IMAP / POP3

Con la ayuda de `Internet Message Access Protocol`( `IMAP`), es posible acceder a los correos electrónicos desde un servidor de correo. A diferencia de `Post Office Protocol`( `POP3`), IMAP permite la gestión en línea de correos electrónicos directamente en el servidor y admite estructuras de carpetas. Por lo tanto, es un protocolo de red para la gestión en línea de correos electrónicos en un servidor remoto. El protocolo está basado en cliente-servidor y permite la sincronización de un cliente de correo electrónico local con el buzón en el servidor, proporcionando una especie de sistema de archivos de red para correos electrónicos, lo que permite una sincronización sin problemas entre varios clientes independientes. POP3, por otro lado, no tiene la misma funcionalidad que IMAP y solo proporciona listado, recuperación y eliminación de correos electrónicos como funciones en el servidor de correo. Por lo tanto, protocolos como IMAP deben usarse para funcionalidades adicionales como buzones jerárquicos directamente en el servidor de correo, acceso a múltiples buzones durante una sesión y preselección de correos electrónicos.

Los clientes acceden a estas estructuras en línea y pueden crear copias locales. Incluso entre varios clientes, esto da como resultado una base de datos uniforme. Los correos electrónicos permanecen en el servidor hasta que se eliminan. IMAP se basa en texto y ofrece funciones avanzadas, como la navegación por correos electrónicos directamente en el servidor. También es posible que varios usuarios accedan al servidor de correo electrónico simultáneamente. Sin una conexión activa al servidor, la gestión de correos electrónicos es imposible. Sin embargo, algunos clientes ofrecen un modo sin conexión con una copia local del buzón. El cliente sincroniza todos los cambios locales sin conexión al restablecerse la conexión.

El cliente establece la conexión con el servidor a través del puerto `143`. Para la comunicación, utiliza comandos de texto en `ASCII`formato . Se pueden enviar varios comandos consecutivos sin esperar la confirmación del servidor. Las confirmaciones posteriores del servidor se pueden asignar a los comandos individuales utilizando los identificadores enviados junto con los comandos. Inmediatamente después de establecer la conexión, el usuario se autentica en el servidor con su nombre de usuario y contraseña. El acceso al buzón deseado solo es posible tras una autenticación correcta.

El protocolo SMTP se utiliza habitualmente para enviar correos electrónicos. Al copiar los correos enviados a una carpeta IMAP, todos los clientes tienen acceso a todos los correos enviados, independientemente del equipo desde el que se enviaron. Otra ventaja del Protocolo de Acceso a Mensajes de Internet (SMTP) es la creación de carpetas personales y estructuras de carpetas en el buzón. Esta función facilita la gestión del buzón. Sin embargo, aumenta la necesidad de espacio de almacenamiento en el servidor de correo electrónico.

Sin medidas adicionales, IMAP funciona sin cifrar y transmite comandos, correos electrónicos o nombres de usuario y contraseñas en texto plano. Muchos servidores de correo electrónico requieren establecer una sesión IMAP cifrada para garantizar una mayor seguridad del tráfico y evitar el acceso no autorizado a los buzones. Para ello, se suele utilizar SSL/TLS. Según el método y la implementación, la conexión cifrada utiliza el puerto estándar `143`o uno alternativo, como `993`.

## Configuración predeterminada

Tanto IMAP como POP3 ofrecen una gran cantidad de opciones de configuración, lo que dificulta profundizar en cada componente. Si desea examinar estas configuraciones de protocolo con más detalle, le recomendamos crear una máquina virtual local e instalar los dos paquetes `dovecot-imapd`, y `dovecot-pop3d`usar `apt`y experimentar con las configuraciones.

En la documentación de Dovecot, podemos encontrar las [configuraciones principales](https://doc.dovecot.org/settings/core/) individuales y las opciones [de configuración del servicio](https://doc.dovecot.org/configuration_manual/service_configuration/) que podemos utilizar en nuestros experimentos. Sin embargo, veamos la lista de comandos y cómo podemos interactuar y comunicarnos directamente con IMAP y POP3 mediante la línea de comandos.

### Comandos IMAP

<table data-header-hidden><thead><tr><th width="235.33331298828125"></th><th></th></tr></thead><tbody><tr><td><strong>Dominio</strong></td><td><strong>Descripción</strong></td></tr><tr><td>1 LOGIN username password</td><td>Inicio de sesión del usuario.</td></tr><tr><td>1 LIST "" *</td><td>Enumera todos los directorios.</td></tr><tr><td>1 CREATE "INBOX"</td><td>Crea un buzón con un nombre especificado.</td></tr><tr><td>1 DELETE "INBOX"</td><td>Elimina un buzón.</td></tr><tr><td>1 RENAME "ToRead" "Important"</td><td>Cambia el nombre de un buzón.</td></tr><tr><td>1 LSUB "" *</td><td>Devuelve un subconjunto de nombres del conjunto de nombres que el usuario ha declarado como <code>active</code>o <code>subscribed</code>.</td></tr><tr><td>1 SELECT INBOX</td><td>Selecciona un buzón para que se pueda acceder a los mensajes que contiene.</td></tr><tr><td>1 UNSELECT INBOX</td><td>Sale del buzón seleccionado.</td></tr><tr><td>1 FETCH &#x3C;ID> all</td><td>Recupera datos asociados a un mensaje en el buzón.</td></tr><tr><td>1 CLOSE</td><td>Elimina todos los mensajes con la <code>Deleted</code>bandera establecida.</td></tr><tr><td>1 LOGOUT</td><td>Cierra la conexión con el servidor IMAP.</td></tr></tbody></table>

### Comandos POP3

<table data-header-hidden><thead><tr><th width="166.66668701171875"></th><th></th></tr></thead><tbody><tr><td><strong>Dominio</strong></td><td><strong>Descripción</strong></td></tr><tr><td>USER username</td><td>Identifica al usuario.</td></tr><tr><td>PASS password</td><td>Autenticación del usuario mediante su contraseña.</td></tr><tr><td>STAT</td><td>Solicita la cantidad de correos electrónicos guardados del servidor.</td></tr><tr><td>LIST</td><td>Solicita al servidor el número y tamaño de todos los correos electrónicos.</td></tr><tr><td>RETR id</td><td>Solicita al servidor que entregue el correo electrónico solicitado por ID.</td></tr><tr><td>DELE id</td><td>Solicita al servidor que elimine el correo electrónico solicitado por ID.</td></tr><tr><td>CAPA</td><td>Solicita al servidor que muestre las capacidades del servidor.</td></tr><tr><td>RSET</td><td>Solicita al servidor que restablezca la información transmitida.</td></tr><tr><td>QUIT</td><td>Cierra la conexión con el servidor POP3.</td></tr></tbody></table>

## Configuraciones peligrosas

Sin embargo, las opciones de configuración incorrectas podrían permitirnos obtener más información, como depurar los comandos ejecutados en el servicio o iniciar sesión de forma anónima, de forma similar al servicio FTP. La mayoría de las empresas utilizan proveedores de correo electrónico externos como Google, Microsoft y muchos otros. Sin embargo, algunas empresas aún utilizan sus propios servidores de correo por diversas razones. Una de ellas es proteger su privacidad. Los administradores pueden cometer muchos errores de configuración, lo que, en el peor de los casos, nos permitirá leer todos los correos electrónicos enviados y recibidos, que incluso pueden contener información confidencial. Algunas de estas opciones de configuración incluyen:

<table data-header-hidden><thead><tr><th width="236"></th><th></th></tr></thead><tbody><tr><td><strong>Configuración</strong></td><td><strong>Descripción</strong></td></tr><tr><td>auth_debug</td><td>Habilita todo el registro de depuración de autenticación.</td></tr><tr><td>auth_debug_passwords</td><td>Esta configuración ajusta el nivel de detalle del registro, las contraseñas enviadas y el esquema que se registra.</td></tr><tr><td>auth_verbose</td><td>Registra los intentos de autenticación fallidos y sus motivos.</td></tr><tr><td>auth_verbose_passwords</td><td>Las contraseñas utilizadas para la autenticación se registran y también pueden truncarse.</td></tr><tr><td>auth_anonymous_username</td><td>Esto especifica el nombre de usuario que se utilizará al iniciar sesión con el mecanismo SASL ANÓNIMO.</td></tr></tbody></table>

## Footprinting del servicio

De forma predeterminada, los puertos `110`y `995`se utilizan para POP3, y los puertos `143`y `993`para IMAP. Los puertos superiores ( `993`y `995`) utilizan TLS/SSL para cifrar la comunicación entre el cliente y el servidor. Con Nmap, podemos escanear el servidor en busca de estos puertos. El escaneo devolverá la información correspondiente (como se muestra a continuación) si el servidor utiliza un certificado integrado.

### Nmap

```sh
sudo nmap <ip> -sV -p110,143,993,995 -sC
```

Por ejemplo, en la salida, podemos ver que el nombre común es `mail1.inlanefreight.htb`y que el servidor de correo electrónico pertenece a la organización `Inlanefreight`, ubicada en California. Las capacidades mostradas muestran los comandos disponibles en el servidor y para el servicio en el puerto correspondiente.

Si logramos descubrir las credenciales de acceso de uno de los empleados, un atacante podría iniciar sesión en el servidor de correo y leer o incluso enviar los mensajes individuales.

### Curl

```sh
curl -k 'imaps://<ip>' --user <user>:<password>
```

Si también usamos la opción `verbose`( `-v`), veremos cómo se establece la conexión. Aquí podemos ver la versión de TLS utilizada para el cifrado, más detalles del certificado SSL e incluso el banner, que suele contener la versión del servidor de correo.

```sh
curl -k 'imaps://<ip>' --user <user>:<password> -v
```

Para interactuar con el servidor IMAP o POP3 mediante SSL, podemos usar `openssl`, así como `ncat`. Los comandos serían similares a estos:

### OpenSSL - Interacción cifrada TLS POP3

```sh
openssl s_client -connect <ip>:pop3s
```

### OpenSSL - Interacción cifrada TLS IMAP

```sh
openssl s_client -connect <ip>:imaps
```

Una vez iniciada la conexión e iniciada la sesión en el servidor de correo de destino, podemos usar los comandos anteriores para trabajar con él y navegar por él. Cabe destacar que la configuración de nuestro propio servidor de correo, la investigación al respecto y los experimentos que podemos realizar junto con otros miembros de la comunidad nos permitirán comprender la comunicación y las opciones de configuración responsables de ella.
