Ir al contenido

Cheatsheet de SMTP

Por

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

Sustituye DOMAIN, FQDN, TARGET_IP, SENDER, RECIPIENT y EXTERNAL_RECIPIENT. La explicación completa está en el protocolo y el flujo de trabajo.

Rutas y políticas
dig +short MX DOMAIN
dig +short A FQDN
dig +short AAAA FQDN
dig +short TXT DOMAIN
dig +short TXT _dmarc.DOMAIN
dig +short TXT _mta-sts.DOMAIN
dig +short TXT _smtp._tls.DOMAIN

Un TXT en la raíz puede contener valores que no son SPF. Filtra por v=spf1.

Texto claro
nc -nv TARGET_IP 25
Diálogo mínimo
EHLO operator.example.test
HELP
QUIT
Swaks hasta EHLO
swaks --server TARGET_IP --port 25 \
--ehlo operator.example.test --quit-after EHLO
STARTTLS
openssl s_client -connect FQDN:25 \
-starttls smtp -servername FQDN -crlf -quiet
TLS implícito
openssl s_client -connect FQDN:465 \
-servername FQDN -crlf -quiet

Envía otro EHLO dentro de TLS.

Autenticación acotada sin secreto en el comando
swaks --server FQDN --port 587 \
--ehlo operator.example.test \
--tls \
--auth PLAIN \
--auth-user USERNAME \
--auth-password \
--timeout 10s \
--quit-after AUTH

Swaks solicita el secreto si no lo obtiene de .netrc. La señal alcanza como máximo la fase AUTH. No prueba autorización de relay ni entrega. La automatización SMTP explica cómo separar esas transacciones.

Transacción manual
EHLO operator.example.test
MAIL FROM:<SENDER>
RCPT TO:<RECIPIENT>
RSET
QUIT
Swaks hasta RCPT
swaks --server TARGET_IP --port 25 \
--ehlo operator.example.test \
--from SENDER --to RECIPIENT \
--quit-after RCPT

250 en RCPT no garantiza entrega final.

Consultas manuales
VRFY USERNAME
EXPN LISTNAME
Lista acotada mediante RCPT
smtp-user-enum -M RCPT -U users.txt -D DOMAIN -t TARGET_IP

Incluye candidatos aleatorios. Catch-all y validación diferida generan falsos positivos.

Servicio y comandos
sudo nmap -sV -n -Pn -p 25,465,587 \
--script smtp-commands TARGET_IP
Metadatos NTLM
sudo nmap -sV -n -Pn -p 25,587 \
--script smtp-ntlm-info TARGET_IP
Ayuda antes de ejecutar
nmap --script-help smtp-open-relay

No uses --script 'smtp-*'. El catálogo incluye brute force y checks intrusivos.

Comprobar destinatario externo
swaks --server TARGET_IP --port 25 \
--ehlo operator.example.test \
--from SENDER --to EXTERNAL_RECIPIENT \
--quit-after RCPT

Registra si remitente, destinatario, origen, TLS y autenticación son locales o externos.

Familia Interpretación
2xx aceptado en esa fase
3xx espera información
4xx temporal, puede existir greylisting o throttling
5xx permanente para esa solicitud

Conserva código mejorado como 5.7.1 y el texto completo.