IMAP y POP3
Cuando el correo ya ha sido entregado, el cliente todavía necesita acceder a él. Post Office Protocol (POP3) modela un maildrop y una sesión breve de autorización, transacción y actualización. Internet Message Access Protocol (IMAP) mantiene buzones, flags, búsquedas y estado compartido en el servidor. Ambos exponen mensajes, pero responden a formas distintas de trabajar con ellos.
La diferencia cambia el riesgo de una operación aparentemente simple. En IMAP, seleccionar un buzón y usar BODY.PEEK puede evitar alterar el flag de lectura. En POP3, DELE marca un mensaje y QUIT puede hacer efectivo el borrado. La enumeración comienza por capacidades y TLS, continúa con una identidad concreta y conserva cada transición de estado antes de recuperar contenido.
Los ejemplos usan FQDN, TARGET_IP, USERNAME y PASSWORD como placeholders.
Orden de trabajo y herramientas
Sección titulada «Orden de trabajo y herramientas»Nmap confirma puertos y capacidades iniciales. OpenSSL permite mantener un diálogo IMAP o POP3 dentro de TLS y observar STARTTLS. cURL sirve para operaciones autenticadas concretas sin implementar el protocolo en una shell. Usa un cliente de correo solo cuando necesites comprobar el comportamiento de usuario, porque la sincronización, la caché y el borrado pueden modificar el buzón.
| Pregunta | Herramienta | Señal que debe conservarse |
|---|---|---|
| ¿qué protocolo y protección ofrece? | Nmap y OpenSSL | banner, capacidades, TLS y certificado |
| ¿qué autenticación admite? | CAPABILITY/CAPA |
mecanismos antes y después de STARTTLS |
| ¿qué buzones o mensajes ve la cuenta? | OpenSSL o cURL | identidad, mailbox, UID y operación ejecutada |
| ¿el resultado depende del cliente? | segundo cliente | comando equivalente y cambio de estado |
Ncat basta para recoger el banner en texto, pero OpenSSL es preferible cuando el canal asciende mediante STARTTLS. La guía de interacción manual explica esa diferencia.
Puertos y protección del canal
Sección titulada «Puertos y protección del canal»| Protocolo | Texto con posible STARTTLS | TLS implícito |
|---|---|---|
| IMAP | 143/tcp |
993/tcp |
| POP3 | 110/tcp |
995/tcp |
En los puertos de texto, STARTTLS actualiza la conexión. En los puertos implícitos, el handshake TLS ocurre antes de cualquier comando. Nmap identifica los cuatro servicios y consulta capacidades con scripts específicos:
nmap -sV -p 110,143,993,995 \ --script imap-capabilities,pop3-capabilities \ TARGET_IPUna capacidad anunciada antes de TLS puede cambiar después de negociarlo. En especial, el servidor puede ocultar mecanismos de autenticación hasta que el canal esté protegido.
Para actualizar una conexión de texto, openssl s_client necesita conocer el diálogo STARTTLS del protocolo. -starttls imap o -starttls pop3 envía la orden adecuada antes del handshake TLS:
openssl s_client -connect FQDN:143 -starttls imap \ -servername FQDN -crlf -quiet
openssl s_client -connect FQDN:110 -starttls pop3 \ -servername FQDN -crlf -quietUna respuesta satisfactoria confirma que ese servicio puede actualizar el canal. No demuestra que el servidor rechace credenciales antes de TLS. Esa política se comprueba comparando las capacidades y la respuesta de autenticación antes y después de la negociación.
Dialogar con IMAP
Sección titulada «Dialogar con IMAP»Cada comando IMAP comienza con un tag elegido por el cliente. El servidor reutiliza ese tag en la respuesta final. Las respuestas que empiezan por * son datos no etiquetados.
openssl s_client abre IMAPS. -crlf convierte los finales de línea que espera el protocolo, -quiet reduce mensajes locales y -servername establece SNI:
openssl s_client -connect FQDN:993 -servername FQDN -crlf -quietDentro de la sesión, cada comando usa un tag diferente:
a1 CAPABILITYa2 LOGIN USERNAME PASSWORDa3 LIST "" "*"LIST recibe un nombre de referencia y un patrón. "" "*" solicita los buzones visibles desde la raíz. Para trabajar con mensajes, primero se selecciona un buzón:
a4 SELECT INBOXa5 SEARCH ALLa6 FETCH 1 (FLAGS BODY.PEEK[HEADER])a7 LOGOUTSEARCH ALL devuelve números de secuencia válidos en la sesión seleccionada. FETCH 1 actúa sobre el primero de ellos. BODY.PEEK evita marcar el mensaje como leído por esa operación. Los UID son más estables que estos números y se consultan con comandos UID SEARCH y UID FETCH.
CLOSE aplica el expunge de mensajes marcados \Deleted y deselecciona el buzón. UNSELECT lo deselecciona sin expunge. Ambas operaciones reciben solo el tag y el nombre del comando.
Dialogar con POP3
Sección titulada «Dialogar con POP3»POP3 atraviesa tres estados: autorización, transacción y actualización. Antes de autenticarse se permiten comandos como CAPA, USER y PASS. Después se habilitan operaciones sobre el maildrop.
openssl s_client -connect FQDN:995 -servername FQDN -crlf -quietLas respuestas comienzan por +OK o -ERR. Las respuestas multilínea terminan con una línea que contiene solo un punto:
CAPAUSER USERNAMEPASS PASSWORDSTATLISTRETR 1QUITSTAT devuelve cantidad y tamaño total. LIST enumera números y tamaños. RETR 1 descarga el primer mensaje. DELE 1 solo marca el mensaje para borrado. El servidor aplica esos cambios al entrar en el estado de actualización mediante QUIT. RSET elimina las marcas de borrado durante la sesión.
Usar cURL sin exponer secretos
Sección titulada «Usar cURL sin exponer secretos»cURL entiende URLs IMAP e IMAPS. --user USERNAME pide la contraseña de forma interactiva si no se incluye tras dos puntos. Esto evita colocarla en la línea de comandos:
curl --user USERNAME 'imaps://FQDN/'Para POP3S, la URL raíz lista mensajes y una ruta como /1 recupera uno:
curl --user USERNAME 'pop3s://FQDN/1'El contenido descargado puede incluir datos sensibles, archivos adjuntos y tokens. Conserva las cabeceras completas y los hashes si el mensaje se usa como evidencia. Evita cambiar flags o borrar mensajes mientras solo se está construyendo el inventario.
Revisar Dovecot
Sección titulada «Revisar Dovecot»Dovecot puede exponer IMAP, POP3 o ambos. doveconf -n muestra ajustes que difieren de los valores predeterminados y procesa includes:
sudo doveconf -nRelaciona protocols, listeners, ssl, certificados, auth_mechanisms, disable_plaintext_auth, mail_location, passdb y userdb. El nombre de un mecanismo no indica por sí solo dónde se validan credenciales ni cómo se localiza el buzón.
Automatización y diferencias de resultado
Sección titulada «Automatización y diferencias de resultado»imap-capabilities y pop3-capabilities consultan anuncios previos a la autenticación. imap-ntlm-info y pop3-ntlm-info inician NTLM para recuperar campos que el servidor exponga. Los scripts *-brute generan intentos autenticados y deben usar una política de bloqueo conocida, un conjunto acotado y un rate registrado.
Comprueba manualmente la misma sesión. En IMAP, una respuesta tagged cierra cada comando y una respuesta NO no equivale a usuario inexistente. En POP3, -ERR conserva poca semántica y servidores distintos uniforman errores para evitar enumeración. Las capacidades pueden cambiar tras STARTTLS y después de autenticar, por lo que cada fase necesita su propia captura.
Acceso autenticado y alcance de datos
Sección titulada «Acceso autenticado y alcance de datos»Una cuenta IMAP puede exponer namespaces, buzones compartidos, ACL, flags, metadatos y mensajes. Enumera primero NAMESPACE, LIST y STATUS. Recupera cuerpos o adjuntos solo cuando sean necesarios para validar el acceso. En POP3, STAT, LIST, UIDL y TOP permiten inventariar antes de usar RETR. DELE solo marca mensajes, pero QUIT puede confirmar el borrado. No lo uses durante enumeración.
Registra si la credencial se probó contra IMAP, POP3 o ambos, el nombre exacto presentado, el mecanismo SASL, el canal TLS y el buzón alcanzado. La misma contraseña puede desembocar en permisos diferentes por protocolo.
Telemetría y limpieza
Sección titulada «Telemetría y limpieza»El servidor registra dirección de origen, TLS, mecanismo, identidad, éxito o fallo, mailbox y operaciones. Los gateways pueden registrar además la negociación NTLM. Cierra sesiones con LOGOUT en IMAP y QUIT en POP3, destruye archivos temporales de mensajes y conserva hashes y headers mínimos si se recuperó evidencia. Un timeout, bloqueo temporal o throttling se registra como limitación, no como ausencia de acceso.
Referencias operativas
Sección titulada «Referencias operativas»Compara clientes y scripts en herramientas, automatización y NSE. La checklist controla buzones, estados y cleanup. La cheatsheet reúne diálogos ya explicados.