Pentest SMTP - puerto 25, 465 587
services
SMTP o Simple Mail Transfer Protocol (Protocolo Simple de Transferencia de Correo) es un protocolo de red que permite enviar y recibir correos electrónicos a través de internet. Funciona para que los servidores de correo retransmitan y envíen mensajes entre usuarios. Para la recepción de correos, se suelen usar otros protocolos como IMAP o POP3.
SMTP trabaja por el puerto 25, 465 o 587 de una maquina, los ultimos 2 junto SSL/TLS
SMTPS
las versiones de SMTP junto SSL se le llama SMTPS que significa Simple Mail Transfer Protocol Secure, una versión segura del protocolo SMTP que se utiliza para enviar y recibir correos electrónicos a través de internet con cifrado SSL/TLS. SMTPS añade una capa de cifrado (SSL/TLS) a las comunicaciones de SMTP para proteger la privacidad y la integridad de los mensajes.
Reconocimiento
SMTP Banner Grabbing por netcat
este comando, usa netcat para conectarse al puerto 25 e intentar hacer banner grabbing, una técnica de reconocimiento tanto pasiva como activa, en este caso es un banner grabbing agresivo (activo) ya que estamos haciendo una petición directa al servicio:
nc -vn <IP_AQUI> <PUERTO_SMTP_AQUI>MX servers (DNS Enum)
Los MX servers son registros MX (Mail eXchange), que son entradas en el Sistema de Nombres de Dominio (DNS) que indican a otros servidores dónde deben enviar los correos electrónicos de un dominio determinado. Estos registros especifican los servidores de correo electrónicos responsables de recibir y procesar los emails entrantes para un dominio, actuando como una dirección postal para el correo electrónico y asegurando que los mensajes lleguen a su destino correcto.
dig +short mx ejemplo.comEnumeración de SMTP por Nmap
nmap -p25 --script smtp-commands 1.1.1.1
nmap -p25 --script smtp-open-relay 1.1.1.1 -vEl script
smtp-commandsse conecta al servidor SMTP y enumera los comandos soportados:envía un
EHLOy obtiene la lista de extensiones y capacidades.
El script
smtp-open-relayque intenta detectar si el servidor funciona como open relay, osea que es un servidor SMTP mal configurado que permite enviar correos a cualquier destinatario, sin autenticación:los servidores open relay hacen al servidor vulnerable a ser usado para ataques de spam o phishing
Enumeración de usuarios en SMTP
el script de nmap smtp-enum-users.nse nos permite enumerar los usuarios existentes:
nmap -p25 --script smtp-enum-users.nse ejemplo.comSMTP open relay abuse
Un open relay es un servidor de correo electrónico (SMTP) mal configurado que permite a cualquier persona en internet enviar correos electrónicos a través de él, sin necesidad de autenticación. Esto crea una vulnerabilidad de seguridad que los ciberdelincuentes explotan para enviar grandes volúmenes de correo no deseado (spam), realizar ataques de phishing o distribuir malware, lo que a menudo lleva a que el servidor sea incluido en listas negras y a que los correos legítimos sean rechazados.
# prueba manual de relay
telnet target.com <PUERTO_AQUI> # nos conectamos al servidor SMTP victima
MAIL FROM:<atacante@ejemplo.com> # Indicamos el remitente del correo, no importa que realmente exista el dominio ejemplo.com, el servidor lo tomara como que el correo viene de aquel dominio
RCPT TO:<test2@anotherexample.com> # Indicas el destinatario del correo, que de igual manera puede ser de cualquier dominio
DATA # el comando DATA indica que ahora escribiras el cuerpo del correo
Subject: Open Relay! # Asunto del correo
Hola! # texto del mensaje
. # se usa para indicar el final del correo
QUIT # cerramos sesionCuando el servidor acepta enviar tu correo teniendo en cuenta que ni el remitente como el destinatario son del mismo dominio, significa que esta mal configurado y lo hace open relay.
es una vulnerabilidad grave ya que como se menciono anteriormente:
"
Esto crea una vulnerabilidad de seguridad que los ciberdelincuentes explotan para enviar grandes volúmenes de correo no deseado (spam), realizar ataques de phishing o distribuir malware, lo que a menudo lleva a que el servidor sea incluido en listas negras y a que los correos legítimos sean rechazados."
por eso, los administradores suelen configurar el servidor para que no ocurra esto.
En un servidor seguro, al intentar un open relay debería mostrarse un error: 550 Relaying denied o similares.
Disclosure Attacks
Information Disclosure via NTLM auth
El information disclosure (divulgación de información) es una vulnerabilidad de seguridad donde se revela información sensible o confidencial a personas no autorizadas, ya sea por errores, negligencia o fallos en la seguridad. Esta fuga puede exponer datos de usuarios, información técnica, o detalles de negocio, permitiendo a los atacantes obtener información valiosa para lanzar ataques más dirigidos, resultando en consecuencias como robo de identidad, pérdidas financieras y daño a la reputación.
si el servidor soporta NTLM podríamos intentar aprovecharnos de esto para acceder a información sensible
telnet example.com <PUERTO_SMTP_AQUI> # Puerto especifico
# Despues de establecer la conexión, el server de correo deberia mostrar su banner de bienvenida
>> HELO # enviamos un saludo para presentarnos al servidor, tambien funciona EHLO (Extended Hello) version extendida de HELO
250 example.com Hello [x.x.x.x] # el servidor responde nuestro saludo (lo acepta)
>> AUTH NTLM # indicamos al servidor que queremos autenticarnos por NTLM
334 NTLM supported # el servidor responde con el codigo 334, por lo que se nos indica que para indicar que esta esperando el primer token NTLM en base64.
>> TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA= # Esto es un blob base64 que representa el NTLM Negotiate Message.Un blob (viene de Binary Large Object) es básicamente un bloque de datos binarios que no se interpreta directamente como texto legible.
Hemos enviado un blob el cual es Un mensaje binario del protocolo NTLM (Negotiate, Challenge o Authenticate).
Está codificado en base64 para poder enviarse por texto a través de SMTP.
Dentro contiene información estructurada: versión, nombre de dominio, nombre de host, flags de seguridad, y eventualmente las credenciales cifradas.
TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=Ese string base64 cuando lo decodificas no es texto plano, sino un blob binario NTLM Negotiate. Si lo pasas por una herramienta que entienda NTLM, te puede mostrar algo así como:
Signature: "NTLMSSP"
Message Type: Negotiate (0x01)
Flags: 0xb208
Domain Name: vacío
Workstation: vacío
El information disclosure ocurre en el momento en que el servidor acepta iniciar la autenticación NTLM y responde a blobs
En ese momento, aunque no logremos autenticarnos con éxito, el servidor nos devuelve información valiosa:
El banner inicial SMTP (nombre de host, dominio o versión del software).
El mensaje de Challenge NTLM, que suele o debe contener:
Nombre del dominio
Nombre de host / NetBIOS
Versión del sistema operativo
Flags de configuración de seguridad (qué soporta y qué no)
la fuga no está en el blob que enviamos, sino en la respuesta del servidor que expone datos de su configuración interna.
Information Disclosure via internal misconfiguration
telnet example.com <PUERTO_SMTP_AQUI> # solicitas la conexion
220 example.com SMTP MAIL Service, Version: ready at # estableces la conexion
EHLO all # EHLO es la version extendida de HELO (visto anteriormente)
250-somedomain.com Hello [1.1.1.1] # el servidor responde tu saludo y se presenta
MAIL FROM: me
250 2.1.0 me@PRODSERV01.somedomain.com....Sender OKMAIL FROM: me
Simulas el envío de correo con el remitente "me". En teoría debería ser una dirección completa
(MAIL FROM:user@example.com).
250 2.1.0 me@PRODSERV01.somedomain.com....Sender OK
aquí se filtra información, pues el servidor auto completo tu dirección de correo con su dominio interno y hostname (PRODSERV01.somedomain.com)
Last updated