Envío de correo electrónico con autenticación SMTP a través de Telnet u OpenSSL

Puede utilizar el integrado telnet herramienta de línea de comandos para conectarse a un servidor SMTP remoto y enviar un correo electrónico de prueba. Esta es la forma más fácil y rápida de probar un servidor SMTP remoto y no requiere la instalación de un cliente SMTP completo. Pero en la mayoría de los casos, los servidores SMTP requieren la autenticación del usuario, y el envío no autenticado solo es posible a través de servidores SMTP anónimos (retransmisiones SMTP).

En este ejemplo, le mostraremos cómo autenticarse en un servidor SMTP y enviar un correo electrónico desde la línea de comandos de telnet. Consideraremos la opción con un servidor SMTP normal, así como con un servidor SMTP que acepte conexiones solo a través de un protocolo SST/TLS seguro.

Prueba de autenticación SMTP con Telnet

Para autenticarse en un host SMTP remoto a través de telnet, Autenticación básica debe estar permitido en su configuración. La autenticación básica está habilitada de forma predeterminada en los servidores Exchange de la red corporativa. Este tipo de autenticación consiste en enviar el nombre de usuario y la contraseña a través de la red en base64 forma codificada.

En Exchange Server, puede habilitar o deshabilitar la autenticación básica en la configuración del conector de recepción.

Autenticación básica en el conector de Exchange de recepción

Puede habilitar la autenticación básica en el conector de Exchange desde la consola de PowerShell (debe instalar EMS en su computadora o conectarse a Exchange Server de forma remota):

Get-ReceiveConnector "ExchRecConnector1" | Set-ReceiveConnector -AuthMechanism Tls, Integrated, BasicAuth, ExchangeServer

Nota. Por favor, preste atención a que si el atacante tiene acceso al canal de comunicación, puede capturar y descifrar fácilmente las credenciales de usuario codificadas con Base64. Por lo tanto, este método de autenticación se recomienda solo para redes corporativas privadas.

Si está utilizando canales de comunicación no seguros entre el cliente y el host de Exchange, es recomendable permitir BasicAuth solo después de establecer una sesión TLS segura. Habilitar el Ofrezca autenticación básica solo después de iniciar TLS opción en las propiedades del conector en EMC, o use PowerShell:

Get-ReceiveConnector "ExchRecConnector1" | Set-ReceiveConnector -AuthMechanism 'Tls, BasicAuth, BasicAuthRequireTLS'

Los detalles del envío de mensajes SMTP a través de TLS/SSL se describen en la siguiente sección del artículo.

Para autenticarse en el servidor SMTP a través de AUTH LOGIN, debe convertir el nombre de usuario y la contraseña desde los que se enviará el correo electrónico al formato Base64. Para convertir una cadena a Base64, puede usar la función de PowerShell:

[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("[email protected]"))

codificación powershell a ToBase64String

O el módulo Perl MIME::Base64:

perl -MMIME::Base64 -e 'print encode_base64("username");'
O utilice cualquier servicio en línea, por ejemplo, https://www.base64encode.org.

El nombre de usuario [email protected] parecía dGVzdF91c2VyQHdvc2h1Yi5jb20g en Base64

La contraseña $up3RsTr)ng convertido en JHVwM1JzVHIpbmc= en Base64

codificación base64

Abra un símbolo del sistema y use Telnet para conectarse al puerto 25 (SMTP) del servidor (resaltaré los comandos que se ingresarán en azul):

telnet mail.woshub.com 25

Si es un host con Exchange Server, devolverá algo como;

220 mail.woshub.com Microsoft ESMTP MAIL Service ready at Thu, 25 Nov 2021 10:22:31 +0300

Primero necesitas presentarte al servidor:

ehlo sender.woshub.com

El servidor devolverá la lista de opciones y métodos de autenticación admitidos. Como puede ver, hay AUTH LOGIN (autenticación básica) en la lista.

250-mail.woshub.com Hello [192.168.1.115]
250-SIZE 36700160
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-AUTH LOGIN
250-8BITMIME
250-BINARYMIME
250 CHUNKING

Los siguientes protocolos de autenticación se pueden usar en servidores SMTP: PLAIN, GSSAPI, DIGEST-MD5, MD5, CRAM-MD5, OAUTH10A, OAUTHBEARER.

Por ejemplo, una respuesta de este tipo del servidor SMTP indica que se admiten 3 protocolos de autenticación.

250 AUTH GSSAPI DIGEST-MD5 PLAIN

Los métodos básicos de autenticación PLAIN e LOGIN utilizan la codificación BASE64 del nombre y la contraseña. La diferencia entre ellos es que para el SENCILLO método el nombre de usuario y la contraseña se envían en una línea. Y al usar ACCESOel inicio de sesión se envía primero, luego la contraseña.

Si su servidor SMTP admite el método de autenticación PLAIN, puede codificar el nombre de usuario y la contraseña mediante la función Perl o PowerShell:

perl -MMIME::Base64 -e 'print encode_base64("�[email protected]�00$up3RsTr)ng")'

[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("�username�password"))

Dígale al servidor SMTP que desea autenticarse mediante el método LOGIN:

INICIO DE SESIÓN

El servidor responderá:
334 VXNlcm5hbWU6

Al autenticarse con el método PLAIN, puede enviar las credenciales del usuario de inmediato:

AUTH SIMPLE XDB0ZXN0X3VzZXJAd29zaHViLmNvbVwwKW5n

Ahora copia y pega el nombre de usuario en el formato Base64 que encriptaste anteriormente:

dGVzdF91c2VyQHdvc2h1Yi5jb20g

El servidor responderá con un código 334:

334 UGFzc3dvcmQ6.

Luego copie y pegue la contraseña en formato Base64:
JHVwM1JzVHIpbmc=

Si el nombre de usuario y la contraseña son correctos, el servidor devolverá:

235 2.7.0 Authentication successful

Que no:

535 5.7.8 Error: authentication failed: UGFzc3dvcmQ6

telnet - AUTH-INICIO DE SESIÓN

Es hora de completar los campos de correo electrónico estándar:

correo de: [email protected]
250 2.1.0 Sender OK
rcpt a: [email protected]
250 2.1.5 Recipient OK
datos
354 Start mail input; end with .
de: TestUser <[email protected]><
a: TheMainAdmin <raí[email protected]>
Asunto: prueba BASE SMTP autenticado a través de Telnet
esto es prueba
.
250 2.6.0 <[email protected]> [InternalId=6334284] Queued mail for delivery

El correo electrónico se ha puesto en cola para su entrega.

enviar correo electrónico usando telnet

RENUNCIAR

221 2.0.0 Closing connection.
Connection closed by foreign host.

Después de un tiempo, compruebe si el correo electrónico se ha entregado en el buzón del destinatario.

Uso de SMTP autenticado sobre TLS/SSL

La mayoría de los proveedores de SMTP no permiten sesiones SMTP de texto sin formato. Solo se permiten conexiones SMTP cifradas con TLS. Puede autenticarse en el servidor SMTP utilizando los métodos LOGIN y PLAIN solo después de inicializar la conexión TLS. Telnet no es compatible con SSL o TLS, por lo que debe utilizar el OpenSSL herramienta para conectarse al servidor SMTP a través de TLS.

Veamos cómo usar OpenSSL para conectarse al servidor SMTP a través de TLS y autenticarse mediante AUTH LOGIN.

Descargue e instale OpenSSL:

Para conectarse al host SMTP desde la línea de comandos con el cifrado SSL/TLS, use el siguiente comando:

openssl.exe s_client -starttls smtp -connect smtp.woshub.com:25

Ejecute el comando EHLO después de establecer una conexión SSL segura con el servidor SMTP.

El servidor SMTP devolverá:

EHLO sender.woshub.com
250- smtp.woshub.com
250-PIPELINING
250-SIZE 52428800
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Ahora puede autenticarse con AUTH LOGIN o AUTH PLAIN y enviar un correo electrónico como se describe anteriormente.

Autenticación SMTP en Office 365 con TLS

A fines de octubre de 2020, Microsoft bloqueó el uso de la autenticación básica para conectarse a los buzones de correo en Exchange Online. La autenticación SMTP para servidores en Office 365 (Microsoft 365/Exchange Online) todavía es compatible, pero se considera insegura. Microsoft deshabilita SMTP AUTH para todos los inquilinos nuevos. Esto significa que no podrá conectarse a hosts SMTP en Office 365 desde la línea de comandos usando telnet o openssl.

Para enviar un correo electrónico de prueba a través de los servidores SMTP de Office 365, debe usar el cmdlet de PowerShell Send-MailMessage.

$emailto='[email protected]'
$emailfrom='[email protected]'
$smtpserver="smtp.office365.com"
$MailMessage = @{
To = $emailto
From = $emailfrom
Subject = "Testing SMTP TLS on O365"
Body = "This is a test measles "
Smtpserver = $smtpserver
#ErrorAction = "SilentlyContinue"
Port="587"
}
Send-MailMessage @MailMessage -UseSsl -Credential $cred

Artículos Interesantes