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.

Nota: Debido a sus limitaciones para poner en cola los mensajes en el extremo del destinatario, SMTP se suele emplear en conjunto con POP3 o IMAP. Estos protocolos adicionales permiten a los clientes almacenar mensajes en un buzón de servidor y descargarlos periódicamente.

  • POP3 suele trabajar por el puerto 110 y el 995 (para conexiones cifradas por SSL/TLS)

  • IMAP suele trabajar por el puerto 143 y el 993 (para conexiones cifradas por SSL/TLS)

En la práctica, es común que los programas de correo electrónico empleen SMTP para enviar correos electrónicos, mientras que POP3 o IMAP para recibirlos. En sistemas Unix, Sendmail destaca como el servidor SMTP más utilizado para el correo electrónico. El paquete comercial Sendmail incluye un servidor POP3. Además, Microsoft Exchange proporciona un servidor SMTP y ofrece la opción de incluir compatibilidad con POP3.

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

Enumeración de SMTP por Nmap

nmap -p25 --script smtp-commands 1.1.1.1
nmap -p25 --script smtp-open-relay 1.1.1.1 -v
  • El script smtp-commands se conecta al servidor SMTP y enumera los comandos soportados:

    • envía un EHLO y obtiene la lista de extensiones y capacidades.

  • El script smtp-open-relay que 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.com

SMTP 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 sesion

Cuando 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

NTLM: conjunto de protocolos de autenticación de Microsoft utilizado en redes Windows para verificar la identidad de usuarios y equipos.

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

Un banner de bienvenida de correo SMTP, o banner de saludo, es la respuesta textual inicial que envía un servidor de correo cuando un cliente se conecta a su servicio SMTP (Protocolo Simple de Transferencia de Correo). Identifica el servidor de correo y proporciona información al cliente que se conecta, que suele incluir el nombre de host, la versión o el nombre de dominio del servidor, por ejemplo:

  • 220 mx.example.com ESMTP Service Ready

  • 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 las credenciales cifradas.

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 OK

MAIL 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