Herramientas, automatización y NSE para SMTP
Esta página amplía el workflow SMTP con herramientas que responden preguntas ya formuladas allí. La automatización acelera una comprobación, pero no convierte una respuesta aislada en una conclusión.
Selección por pregunta
Sección titulada «Selección por pregunta»| Pregunta | Primera opción | Alternativa | Validación |
|---|---|---|---|
| ¿qué anuncia la sesión ESMTP? | swaks |
Ncat u OpenSSL | diálogo EHLO manual |
| ¿cambia después de STARTTLS? | swaks --tls |
openssl s_client -starttls smtp |
comparar ambas respuestas |
| ¿distingue destinatarios? | smtp-user-enum con lista acotada |
swaks --to |
repetir candidatos y controles |
| ¿acepta relay? | swaks |
diálogo manual | completar la transacción sin enviar datos |
| ¿qué scripts NSE encajan? | scripts concretos | prueba manual equivalente | conservar comandos y códigos SMTP |
En openssl s_client, -crlf convierte los saltos de línea interactivos a CRLF, como exige SMTP. -quiet reduce el diagnóstico de OpenSSL después del handshake para que el diálogo SMTP sea legible. Ninguna de las dos opciones cambia la política del servidor:
openssl s_client -connect FQDN:25 \ -starttls smtp -servername FQDN -crlf -quietSwaks construye transacciones SMTP y permite fijar por separado servidor, puerto, identidad del envelope, destinatario, TLS y autenticación. --server elige el endpoint. --port evita depender del puerto predeterminado. --ehlo controla el nombre enviado por el cliente:
swaks --server FQDN --port 25 --ehlo CLIENT_FQDN --quit-after EHLOswaks --server FQDN --port 25 --ehlo CLIENT_FQDN --tls --quit-after EHLO--quit-after EHLO detiene la sesión tras leer capacidades. No prueba autenticación ni entrega. Conserva el código, las extensiones y el certificado de la segunda ejecución.
--from y --to fijan las identidades del envelope. --quit-after RCPT detiene la sesión antes de DATA:
swaks --server FQDN --port 25 \ --from SENDER@SOURCE_DOMAIN --to RECIPIENT@DESTINATION_DOMAIN \ --quit-after RCPTUn 250 en RCPT TO demuestra aceptación en esa fase. La entrega final todavía puede fallar por filtros posteriores. Repite la matriz desde el origen previsto y con destinos locales y externos.
--timeout 10s limita la transacción completa. En TLS implícito, --tls-on-connect inicia el handshake desde el primer byte y cambia el puerto predeterminado a 465, aunque --port sigue teniendo prioridad:
swaks --server FQDN \ --port 465 \ --tls-on-connect \ --ehlo CLIENT_FQDN \ --timeout 10s \ --quit-after EHLO--auth TYPE exige autenticación con el mecanismo indicado. --auth-user fija la identidad. Si --auth-password se proporciona sin valor, Swaks intenta .netrc y después solicita la contraseña:
swaks --server FQDN \ --port 587 \ --tls \ --auth PLAIN \ --auth-user USERNAME \ --auth-password \ --timeout 10s \ --quit-after AUTHEl mecanismo PLAIN protege la credencial únicamente cuando la sesión TLS ya es válida. Conserva la respuesta a EHLO, la negociación TLS y el resultado de AUTH como fases distintas.
--dump procesa las opciones y muestra la configuración sin enviar correo. La salida incluye contraseñas sin enmascarar. Se usa antes de una transacción compleja y se almacena solo si el resultado puede protegerse:
swaks --server FQDN \ --port 587 \ --tls \ --from SENDER@SOURCE_DOMAIN \ --to RECIPIENT@DESTINATION_DOMAIN \ --dumpsmtp-user-enum
Sección titulada «smtp-user-enum»smtp-user-enum automatiza VRFY, EXPN o RCPT TO. -M selecciona el método, -U la lista de candidatos, -t el servidor y -D el dominio cuando el método construye direcciones:
smtp-user-enum -M RCPT -U candidates.txt -t TARGET_IP -D DOMAINPrimero valida manualmente un candidato esperado, uno inexistente y varias cadenas aleatorias. Si todos reciben la misma respuesta, el resultado automatizado no distingue usuarios. La concurrencia puede activar greylisting o límites por origen. Empieza con una lista pequeña y registra el orden de las pruebas.
Nmap 7.99 distribuye nueve scripts con prefijo smtp-. No forman un paquete homogéneo. El glob incluye descubrimiento, fuerza bruta, consultas externas y checks que pueden terminar un proceso SMTP vulnerable.
Consulta la instalación efectiva:
nmap --script-help 'smtp-*'Mapa de scripts
Sección titulada «Mapa de scripts»| Script | Categorías en 7.99 | Prerrequisito | Interacción e interpretación |
|---|---|---|---|
smtp-commands |
default, discovery, safe |
diálogo SMTP | envía EHLO y HELP, devuelve extensiones |
smtp-ntlm-info |
default, discovery, safe |
AUTH NTLM |
solicita challenge sin credenciales y puede revelar nombres y build |
smtp-strangeport |
malware, safe |
-sV identifica SMTP fuera de puertos habituales |
etiqueta puerto no estándar, no demuestra malware |
smtp-enum-users |
auth, external, intrusive |
lista de usuarios y método | prueba RCPT, VRFY o EXPN y necesita controles contra catch-all |
smtp-open-relay |
discovery, intrusive, external |
dominios y destinatario controlado | prueba combinaciones de envelope, un éxito requiere validación |
smtp-brute |
brute, intrusive |
AUTH, listas, política de bloqueo | intenta LOGIN, PLAIN, CRAM-MD5, DIGEST-MD5 o NTLM |
smtp-vuln-cve2010-4344 |
exploit, intrusive, vuln |
Exim antiguo y configuración compatible | el modo exploit envía más de 50 MB y un fallo puede matar el child |
smtp-vuln-cve2011-1720 |
intrusive, vuln |
Postfix con Cyrus SASL afectado | prueba corrupción de memoria, con riesgo de DoS |
smtp-vuln-cve2011-1764 |
intrusive, vuln |
Exim 4.70–4.75 con DKIM y capacidad de enviar | prueba format string mediante contenido DKIM |
Este mapa describe el catálogo revisado, no recomienda ejecutarlo completo.
Descubrimiento de comandos
Sección titulada «Descubrimiento de comandos»smtp-commands acepta smtp-commands.domain. Usa un FQDN controlado para EHLO:
sudo nmap -sV -n -Pn -p 25 \ --script smtp-commands \ --script-args smtp-commands.domain=operator.example.test \ TARGET_IPRepite manualmente EHLO antes y después de STARTTLS. El script puede mostrar HELP y extensiones, pero una capacidad anunciada puede seguir condicionada por origen o autenticación.
Información NTLM
Sección titulada «Información NTLM»smtp-ntlm-info actúa cuando detecta NTLM y acepta smtp-ntlm-info.domain:
sudo nmap -sV -n -Pn -p 25,587 \ --script smtp-ntlm-info \ --script-args smtp-ntlm-info.domain=example.test \ TARGET_IPRegistra si la negociación ocurre antes o después de TLS. Nombres NetBIOS, DNS y build son datos proporcionados por el challenge. Pueden identificar un backend, pero no prueban que el banner visible y el host final sean la misma máquina.
Enumeración de usuarios
Sección titulada «Enumeración de usuarios»smtp-enum-users usa userdb, smtp-enum-users.domain y smtp-enum-users.methods. Por defecto intenta RCPT, VRFY y EXPN según la implementación:
sudo nmap -sV -n -Pn -p 25 \ --script smtp-enum-users \ --script-args 'userdb=users.txt,smtp-enum-users.domain=example.test,smtp-enum-users.methods={RCPT}' \ TARGET_IPEl script es external porque algunos métodos o valores pueden involucrar dominios externos según la configuración. Revisa el código y define todos los dominios. Añade usuarios aleatorios de control. Si el servidor acepta todos, retrasa respuestas o converge después de varios intentos, el resultado no enumera cuentas.
Argumentos relevantes de smtp-open-relay:
smtp-open-relay.domainsmtp-open-relay.fromsmtp-open-relay.tosmtp-open-relay.ip
Sin valores, el script construye datos predeterminados. Usa un dominio y destinatario controlados:
sudo nmap -sV -n -Pn -p 25 \ --script smtp-open-relay \ --script-args 'smtp-open-relay.domain=example.test,smtp-open-relay.from=sender@example.test,smtp-open-relay.to=recipient@external.example.test' \ TARGET_IPActiva -v si necesitas ver combinaciones aceptadas. Después reproduce la secuencia con swaks --quit-after RCPT. Si la prueba exige confirmar entrega, conserva cabeceras y limita el mensaje al buzón controlado.
Fuerza bruta
Sección titulada «Fuerza bruta»smtp-brute.auth prioriza mecanismos. Las librerías brute aceptan listas y controles de concurrencia comunes. Antes de ejecutar, consulta la ayuda de esa versión y caracteriza bloqueo:
nmap --script-help smtp-bruteNo mezcles descubrimiento y fuerza bruta en una misma ejecución. Separa output, rate, credenciales y criterio de parada. Una respuesta temporal, throttling o MFA puede aparecer como fallo de contraseña.
Scripts de vulnerabilidad heredada
Sección titulada «Scripts de vulnerabilidad heredada»Los tres scripts smtp-vuln-* apuntan a productos y condiciones antiguas. La presencia del archivo no hace relevante el CVE. Antes:
- identifica producto y versión con varias señales
- confirma configuración necesaria
- lee el script y el advisory del fabricante
- prepara una comprobación de estado y un procedimiento de recuperación
- ejecuta el modo menos modificador que responda la pregunta
En smtp-vuln-cve2010-4344, el argumento de explotación cambia radicalmente el impacto. La propia documentación indica más de 50 MB y posible terminación del proceso hijo si falla.
TLS y tracing
Sección titulada «TLS y tracing»Los scripts usan puertos 25, 465 y 587 o servicios smtp, smtps y submission. La librería puede negociar TLS según puerto y detección. Confirma el flujo con:
sudo nmap -sV -n -Pn -p PORT \ --script SCRIPT_NAME --script-trace TARGET_IPEl trace puede contener challenges, identidades y credenciales. Trátalo como evidencia sensible.
Validación
Sección titulada «Validación»Todo resultado relevante vuelve al protocolo:
- EHLO y HELP mediante OpenSSL o Swaks
- recipient validation con controles válidos e inventados
- relay con envelope explícito y, si hace falta, buzón controlado
- NTLM con comparación del challenge
- vulnerabilidad con advisory, versión, configuración y respuesta específica