IMAP / POP3
Con la ayuda del Protocolo de Acceso a Mensajes de Internet (IMAP), es posible acceder a los correos electrónicos desde un servidor de correo. A diferencia del Protocolo de Oficina de Correos (POP3), IMAP permite la gestión en línea de correos electrónicos directamente en el servidor y admite estructuras de carpetas. Es un protocolo de red para la gestión en línea de correos electrónicos en un servidor remoto, basado en cliente-servidor, y permite la sincronización de un cliente de correo local con el buzón del servidor, funcionando como una especie de sistema de archivos de red para los correos, con 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 borrado de correos electrónicos como funciones en el servidor. Por lo tanto, protocolos como IMAP deben utilizarse 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.
Comandos IMAP
| Comando | Descripción |
|---|---|
1 LOGIN username password | Inicio de sesión del usuario. |
1 LIST "" * | Enumera todos los directorios. |
1 CREATE "INBOX" | Crea un buzón con un nombre especificado. |
1 DELETE "INBOX" | Elimina un buzón. |
1 RENAME "ToRead" "Important" | Cambia el nombre de un buzón. |
1 LSUB "" * | Devuelve un subconjunto de nombres que el usuario ha declarado como active o subscribed. |
1 SELECT INBOX | Selecciona un buzón para poder acceder a los mensajes del buzón. |
1 UNSELECT INBOX | Sale del buzón seleccionado. |
1 FETCH <ID> all | Recupera datos asociados con un mensaje en el buzón. |
1 CLOSE | Elimina todos los mensajes con la bandera Deleted establecida. |
1 LOGOUT | Cierra la conexión con el servidor IMAP. |
Ejemplos de uso más detallados:
Login
A1 LOGIN username password
Values can be quoted to enclose spaces and special characters. A " must then be escaped with a \
A1 LOGIN "username" "password"
List Folders/Mailboxes
A1 LIST "" *
A1 LIST INBOX *
A1 LIST "Archive" *
Create new Folder/Mailbox
A1 CREATE INBOX.Archive.2012
A1 CREATE "To Read"
Delete Folder/Mailbox
A1 DELETE INBOX.Archive.2012
A1 DELETE "To Read"
Rename Folder/Mailbox
A1 RENAME "INBOX.One" "INBOX.Two"
List Subscribed Mailboxes
A1 LSUB "" *
Status of Mailbox (There are more flags than the ones listed)
A1 STATUS INBOX (MESSAGES UNSEEN RECENT)
Select a mailbox
A1 SELECT INBOX
List messages
A1 FETCH 1:* (FLAGS)
A1 UID FETCH 1:* (FLAGS)
Retrieve Message Content
A1 FETCH 2 (body[text])
A1 FETCH 2 all
A1 UID FETCH 102 (UID RFC822.SIZE BODY.PEEK[])
Close Mailbox
A1 CLOSE
Logout
A1 LOGOUTComandos POP3
| Comando | Descripción |
|---|---|
USER username | Identifica al usuario. |
PASS password | Autenticación del usuario mediante su contraseña. |
STAT | Solicita la cantidad de correos electrónicos guardados en el servidor. |
LIST | Solicita al servidor el número y tamaño de todos los correos electrónicos. |
RETR id | Solicita al servidor que entregue el correo electrónico solicitado por ID. |
DELE id | Solicita al servidor que elimine el correo electrónico solicitado por ID. |
CAPA | Solicita al servidor que muestre sus capacidades. |
RSET | Solicita al servidor que restablezca la información transmitida. |
QUIT | Cierra la conexión con el servidor POP3. |
Configuraciones peligrosas
Las opciones de configuración mal ajustadas podrían permitir 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. Muchas empresas usan proveedores de correo de terceros (Google, Microsoft, etc.), pero algunas siguen operando sus propios servidores de correo por privacidad u otras razones. Los errores de configuración en este último caso, en el peor escenario, permitirían leer todos los correos enviados y recibidos, que pueden contener información confidencial.
| Configuración | Descripción |
|---|---|
auth_debug | Habilita todos los registros de depuración de autenticación. |
auth_debug_passwords | Ajusta el detalle del registro: las contraseñas enviadas y el esquema quedan registrados. |
auth_verbose | Registra los intentos de autenticación fallidos y sus motivos. |
auth_verbose_passwords | Las contraseñas utilizadas para la autenticación se registran (y pueden truncarse). |
auth_anonymous_username | Especifica el nombre de usuario a usar al iniciar sesión con el mecanismo SASL ANONYMOUS. |
Footprinting del servicio con Nmap
❯ sudo nmap 172.16.60.10 -sV -p110,143,993,995 -sC
Starting Nmap 7.80 ( https://nmap.org ) at 2021-09-19 22:09 CEST
Nmap scan report for 172.16.60.10
Host is up (0.00026s latency).
PORT STATE SERVICE VERSION
110/tcp open pop3 Dovecot pop3d
|_pop3-capabilities: AUTH-RESP-CODE SASL STLS TOP UIDL RESP-CODES CAPA PIPELINING
| ssl-cert: Subject: commonName=mail1.empresacorp.local/organizationName=EmpresaCorp/stateOrProvinceName=California/countryName=US
| Not valid before: 2021-09-19T19:44:58
|_Not valid after: 2295-07-04T19:44:58
143/tcp open imap Dovecot imapd
|_imap-capabilities: more have post-login STARTTLS Pre-login capabilities LITERAL+ LOGIN-REFERRALS OK LOGINDISABLEDA0001 SASL-IR ENABLE listed IDLE ID IMAP4rev1
| ssl-cert: Subject: commonName=mail1.empresacorp.local/organizationName=EmpresaCorp/stateOrProvinceName=California/countryName=US
| Not valid before: 2021-09-19T19:44:58
|_Not valid after: 2295-07-04T19:44:58
993/tcp open ssl/imap Dovecot imapd
|_imap-capabilities: more have post-login OK capabilities LITERAL+ LOGIN-REFERRALS Pre-login AUTH=PLAINA0001 SASL-IR ENABLE listed IDLE ID IMAP4rev1
| ssl-cert: Subject: commonName=mail1.empresacorp.local/organizationName=EmpresaCorp/stateOrProvinceName=California/countryName=US
| Not valid before: 2021-09-19T19:44:58
|_Not valid after: 2295-07-04T19:44:58
995/tcp open ssl/pop3 Dovecot pop3d
|_pop3-capabilities: AUTH-RESP-CODE USER SASL(PLAIN) TOP UIDL RESP-CODES CAPA PIPELINING
| ssl-cert: Subject: commonName=mail1.empresacorp.local/organizationName=EmpresaCorp/stateOrProvinceName=California/countryName=US
| Not valid before: 2021-09-19T19:44:58
|_Not valid after: 2295-07-04T19:44:58
MAC Address: 00:00:00:00:00:00 (VMware)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.74 seconds- El certificado autofirmado (
ssl-cert) revela el nombre de la organización, el dominio interno y potencialmente un correo de contacto — información útil para reconocimiento adicional.
cURL - Autenticación IMAP
❯ curl -k 'imaps://172.16.60.10' --user user:p4ssw0rd
* LIST (\HasNoChildren) "." Important
* LIST (\HasNoChildren) "." INBOX-k: ignora errores de verificación del certificado (útil con certificados autofirmados como en este caso).- Si el login es correcto, cURL simplemente lista los buzones/carpetas disponibles para ese usuario.
Con -v para ver el detalle completo del handshake TLS y la negociación IMAP:
❯ curl -k 'imaps://172.16.60.10' --user agarcia:1234 -v
* Trying 172.16.60.10:993...
* TCP_NODELAY set
* Connected to 172.16.60.10 (172.16.60.10) port 993 (#0)
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* Server certificate:
* subject: C=US; ST=California; L=Sacramento; O=EmpresaCorp; OU=Customer Support; CN=mail1.empresacorp.local; emailAddress=agarcia@empresacorp.local
* start date: Sep 19 19:44:58 2021 GMT
* expire date: Jul 4 19:44:58 2295 GMT
* issuer: C=US; ST=California; L=Sacramento; O=EmpresaCorp; OU=Customer Support; CN=mail1.empresacorp.local; emailAddress=agarcia@empresacorp.local
* SSL certificate verify result: self signed certificate (18), continuing anyway.
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
< * OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ AUTH=PLAIN] IMAP4rev1 Server
> A001 CAPABILITY
< * CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ AUTH=PLAIN
< A001 OK Pre-login capabilities listed, post-login capabilities have more.
> A002 AUTHENTICATE PLAIN AGFnYXJjaWEAMTIzNA==
< * CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY PREVIEW=FUZZY LITERAL+ NOTIFY SPECIAL-USE
< A002 OK Logged in
> A003 LIST "" *
< * LIST (\HasNoChildren) "." Important
* LIST (\HasNoChildren) "." Important
< * LIST (\HasNoChildren) "." INBOX
* LIST (\HasNoChildren) "." INBOX
< A003 OK List completed (0.001 + 0.000 secs).
* Connection #0 to host 172.16.60.10 left intact- El bloque
AUTHENTICATE PLAINva codificado en base64; contiene el usuario y la contraseña concatenados y puede decodificarse fácilmente si se captura por la red sin cifrado.
OpenSSL - Interacción cifrada TLS con POP3
❯ openssl s_client -connect 172.16.60.10:pop3s
CONNECTED(00000003)
Can't use SSL_get_servername
depth=0 C = US, ST = California, L = Sacramento, O = EmpresaCorp, OU = Customer Support, CN = mail1.empresacorp.local, emailAddress = agarcia@empresacorp.local
verify error:num=18:self signed certificate
verify return:1
depth=0 C = US, ST = California, L = Sacramento, O = EmpresaCorp, OU = Customer Support, CN = mail1.empresacorp.local, emailAddress = agarcia@empresacorp.local
verify return:1
---
Certificate chain
0 s:C = US, ST = California, L = Sacramento, O = EmpresaCorp, OU = Customer Support, CN = mail1.empresacorp.local, emailAddress = agarcia@empresacorp.local
...SNIP...
---
read R BLOCK
+OK POP3 Server ready- Al conectarnos directamente con
openssl s_client, podemos interactuar manualmente con el protocolo POP3 tras el handshake TLS (por ejemplo, enviandoUSER/PASS/LISTa mano).
OpenSSL - Interacción cifrada TLS con IMAP
❯ openssl s_client -connect 172.16.60.10:imaps
CONNECTED(00000003)
Can't use SSL_get_servername
depth=0 C = US, ST = California, L = Sacramento, O = EmpresaCorp, OU = Customer Support, CN = mail1.empresacorp.local, emailAddress = agarcia@empresacorp.local
verify error:num=18:self signed certificate
verify return:1
depth=0 C = US, ST = California, L = Sacramento, O = EmpresaCorp, OU = Customer Support, CN = mail1.empresacorp.local, emailAddress = agarcia@empresacorp.local
verify return:1
---
Certificate chain
0 s:C = US, ST = California, L = Sacramento, O = EmpresaCorp, OU = Customer Support, CN = mail1.empresacorp.local, emailAddress = agarcia@empresacorp.local
...SNIP...
---
read R BLOCK
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ AUTH=PLAIN] IMAP4rev1 Server- Una vez conectados, se puede escribir manualmente comandos IMAP (
A1 LOGIN usuario contraseña,A1 LIST "" *, etc.) directamente en la sesión cifrada.
Comandos adicionales útiles
Fuerza bruta de credenciales POP3/IMAP con Hydra (cuando ya se tiene una lista de usuarios y contraseñas candidatas):
❯ hydra -L usuarios.txt -P contraseñas.txt 172.16.60.10 pop3
❯ hydra -L usuarios.txt -P contraseñas.txt -S 172.16.60.10 imap-S: indica a Hydra que use SSL/TLS (necesario para el puerto 993/995).
Conexión simple sin TLS para probar el banner y comandos en texto plano (si el servicio lo permite):
❯ nc -nv 172.16.60.10 143