campo falso "de" en un correo electrónico

9

¿Cómo puedo manipular el campo "desde" en un correo electrónico y hacer que el usuario "a" vea algo diferente de lo real?

Ejemplo:

realmente de

From: [email protected]

pero ellos ven

From: Tremayne "Top Dog" Stamper

Lo escuché manipulando SMTP, pero realmente no estoy seguro de qué tan preciso es o cómo se puede hacer

TStamper
fuente
2
Veo esto como un problema válido. Hacemos esto todo el tiempo (particularmente hacer que un correo electrónico de una pieza de software parezca que está enviando a un usuario).
C. Ross
Estoy de acuerdo en que puede ser un problema válido si desea cambiar el campo De para mostrar algo así como un nombre real en lugar de una dirección. Hacemos eso todo el tiempo en nuestros sistemas también. Es solo una pequeña señal debido al ejemplo en la pregunta, cambiando de una dirección a otra. Cebo de spam.
Squillman
actualizado con un mejor ejemplo
TStamper
Por eso crearon registros SPF
Elijah Glover

Respuestas:

14

En su base, SMTP es solo un protocolo basado en texto sin verificación real. Aquí hay un ejemplo:

=== Trying g3.example.net:25...
=== Connected to g3.example.net.
<-  220 home.example.net ESMTP Exim 4.68 Thu, 07 May 2009 11:03:21 -0400
 -> EHLO g3.example.net
<-  250-home.example.net Hello g3.example.net [192.168.0.4]
<-  250-SIZE 52428800
<-  250-PIPELINING
<-  250-AUTH CRAM-SHA1 CRAM-MD5 MSN
<-  250-STARTTLS
<-  250 HELP
 -> MAIL FROM:<[email protected]>
<-  250 OK
 -> RCPT TO:<[email protected]>
<-  250 Accepted
 -> DATA
<-  354 Enter message, ending with "." on a line by itself
 -> Date: Thu, 07 May 2009 11:03:21 -0400
 -> To: [email protected]
 -> From: [email protected]
 -> Subject: test Thu, 07 May 2009 11:03:21 -0400
 -> X-Mailer: swaks v20070921.0-dev jetmore.org/john/code/#swaks
 -> 
 -> This is a test mailing
 -> 
 -> .
<-  250 OK id=KJA4HL-0006M6-8T
 -> QUIT
<-  221 home.example.net closing connection
=== Connection closed with remote host.

La línea "MAIL FROM:" define el remitente del sobre SMTP, y From: se define en el mensaje DATA. Hay formas de protegerse contra esto, pero se definen en la lógica del servidor de correo, no en el protocolo en sí.

Por ejemplo, yo, como proveedor de correo, puede requerir que un usuario se autentique usando un nombre de usuario tipo usuario @ dominio. Entonces mi servidor de correo puede requerir que cualquier correo que envíen tenga un remitente del sobre y un encabezado De: que coincida con el usuario con el que se autenticaron. Tecnologías adicionales como DKIM y SPF también pueden ayudar en esta área.

jj33
fuente
8

Hay un par de cosas diferentes a considerar aquí. Si solo desea mostrar un nombre o dirección de correo electrónico diferente, configure el encabezado "De" del mensaje (la dirección del mensaje) a la dirección de correo electrónico con el nombre para mostrar entre paréntesis como tal:

De: Joe Ejemplo <[email protected]>

Recuerde que la línea "desde" en el encabezado del mensaje solo se utiliza con fines de visualización. El enrutamiento real se realiza mediante la dirección del sobre SMTP. Esto es lo que los servidores SMTP realmente usan para transmitir el mensaje entre servidores. Esto puede ser diferente del mensaje "desde" encabezado. Si tiene un motor SMTP personalizado, solo haga que use una dirección en el sobre SMTP y otra diferente en el encabezado "desde" en el mensaje real.

Hay una serie de razones legítimas por las que es posible que desee hacer esto, pero evite los propósitos nefastos.

Tenga en cuenta que se puede encontrar un ejemplo de sintaxis correcta en RFC 5322 - A.2.1

Justin Scott
fuente
1
El ejemplo del soporte es incorrecto, está al revés
jj33
Fijo; Ha pasado un tiempo desde que implementé este tipo de cosas.
Justin Scott,
Lo actualicé nuevamente para que coincida con RFC 822
Mike Graf
1
@MikeGraf 822 fue reemplazado al menos dos veces, 5322 es mejor.
Patrick Mevzek
2
telnet some_smtp_server.com 25
ehlo whatsup
mail from: [email protected]
rcpt to: [email protected]
data
your message here
end with a dot on a single line like this:
.

Por supuesto, necesitará un servidor SMTP que permita la retransmisión, lo cual es casi imposible de encontrar ... o rodar el suyo propio (¡simplemente no use este conocimiento para enviar spam!).

Ivan
fuente
2

La dirección "realmente de" proviene del diálogo "de:" en la conversación SMTP.

El "falso de" proviene de explotar la práctica común en los clientes de correo electrónico de mostrar los diversos campos de encabezado tal como se establece en la parte de Datos de la conversación SMTP. Por ejemplo:

# telnet mail.example.com 25
Connected to mail.example.com.
Escape character is '^]'.
220 mail.example.com ESMTP Postfix
helo fakeserver
250 mail.example.com
mail from: [email protected]
250 2.1.0 OK
rcpt to: [email protected]
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
from: [email protected]
to: [email protected]
subject: This is a subject
This is the body.
.
250 2.0.0 Ok: queued as 90D0F95A06
quit
221 2.0.0 Bye
Connection closed by foreign host.
#

Si hubiera omitido las líneas "de:" y "a:" en la parte de Datos, habría mostrado el remitente y el destinatario del sobre real.

Tenga en cuenta que este tipo de trucos a menudo son buscados por los filtros de spam, y ciertamente no lo harán amigos permanentes. Además, esto no funciona en todos los clientes de correo (solo los más comunes).

sh-beta
fuente
1

Sí, es mediante la configuración manual de encabezados SMTP y es trivial de lograr. Buscalo en Google. Pero no te dejes atrapar por el spam ...

squillman
fuente
0

Este es mi 2c directamente del código, escrito en C #

    public static void SendSpam(string message, string to)
    {
        System.Net.Mail.MailMessage myMessage = new System.Net.Mail.MailMessage("Fake Name", to);
        myMessage.Subject = "SPAM";
        myMessage.Body = message;
        System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("mail.mailserver.com", 25);
        System.Net.NetworkCredential c = new System.Net.NetworkCredential("[email protected]", "realpassword");
        client.Credentials = c;
        client.Send(myMessage);
    }
Dani
fuente