Skip to content

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

ComandoDescripción
1 LOGIN username passwordInicio 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 INBOXSelecciona un buzón para poder acceder a los mensajes del buzón.
1 UNSELECT INBOXSale del buzón seleccionado.
1 FETCH <ID> allRecupera datos asociados con un mensaje en el buzón.
1 CLOSEElimina todos los mensajes con la bandera Deleted establecida.
1 LOGOUTCierra la conexión con el servidor IMAP.

Ejemplos de uso más detallados:

c
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 LOGOUT

Comandos POP3

ComandoDescripción
USER usernameIdentifica al usuario.
PASS passwordAutenticación del usuario mediante su contraseña.
STATSolicita la cantidad de correos electrónicos guardados en el servidor.
LISTSolicita al servidor el número y tamaño de todos los correos electrónicos.
RETR idSolicita al servidor que entregue el correo electrónico solicitado por ID.
DELE idSolicita al servidor que elimine el correo electrónico solicitado por ID.
CAPASolicita al servidor que muestre sus capacidades.
RSETSolicita al servidor que restablezca la información transmitida.
QUITCierra 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ónDescripción
auth_debugHabilita todos los registros de depuración de autenticación.
auth_debug_passwordsAjusta el detalle del registro: las contraseñas enviadas y el esquema quedan registrados.
auth_verboseRegistra los intentos de autenticación fallidos y sus motivos.
auth_verbose_passwordsLas contraseñas utilizadas para la autenticación se registran (y pueden truncarse).
auth_anonymous_usernameEspecifica el nombre de usuario a usar al iniciar sesión con el mecanismo SASL ANONYMOUS.

Footprinting del servicio con Nmap

c
❯ 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

c
❯ 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:

c
❯ 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 PLAIN va 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

c
❯ 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, enviando USER/PASS/LIST a mano).

OpenSSL - Interacción cifrada TLS con IMAP

c
❯ 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):

c
❯ 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):

c
❯ nc -nv 172.16.60.10 143