Ir al contenido

IMAP y POP3

Por

Madurezreviewed
Última revisión
Publicado
Última actualización

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.

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.

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:

Identificar servicios de acceso al correo
nmap -sV -p 110,143,993,995 \
--script imap-capabilities,pop3-capabilities \
TARGET_IP

Una 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:

Negociar STARTTLS con IMAP y POP3
openssl s_client -connect FQDN:143 -starttls imap \
-servername FQDN -crlf -quiet
openssl s_client -connect FQDN:110 -starttls pop3 \
-servername FQDN -crlf -quiet

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

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:

Abrir una sesión IMAP sobre TLS
openssl s_client -connect FQDN:993 -servername FQDN -crlf -quiet

Dentro de la sesión, cada comando usa un tag diferente:

Consultar capacidades y autenticar en IMAP
a1 CAPABILITY
a2 LOGIN USERNAME PASSWORD
a3 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:

Seleccionar un buzón y leer metadatos
a4 SELECT INBOX
a5 SEARCH ALL
a6 FETCH 1 (FLAGS BODY.PEEK[HEADER])
a7 LOGOUT

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

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.

Abrir una sesión POP3 sobre TLS
openssl s_client -connect FQDN:995 -servername FQDN -crlf -quiet

Las respuestas comienzan por +OK o -ERR. Las respuestas multilínea terminan con una línea que contiene solo un punto:

Enumerar y recuperar un mensaje por POP3
CAPA
USER USERNAME
PASS PASSWORD
STAT
LIST
RETR 1
QUIT

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

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:

Listar buzones IMAPS con cURL
curl --user USERNAME 'imaps://FQDN/'

Para POP3S, la URL raíz lista mensajes y una ruta como /1 recupera uno:

Recuperar un mensaje POP3S
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.

Dovecot puede exponer IMAP, POP3 o ambos. doveconf -n muestra ajustes que difieren de los valores predeterminados y procesa includes:

Mostrar la configuración efectiva de Dovecot
sudo doveconf -n

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

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.

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.

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.

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.