15 KiB
Inyecciones de correo electrónico
Utilice Trickest para construir y automatizar fácilmente flujos de trabajo con las herramientas comunitarias más avanzadas del mundo.
Obtenga acceso hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Obtén el swag oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de Telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PRs al repositorio de hacktricks y al repositorio de hacktricks-cloud.
Inyectar en correo electrónico enviado
Inyectar Cc y Bcc después del argumento del remitente
From:sender@domain.com%0ACc:recipient@domain.co,%0ABcc:recipient1@domain.com
El argumento será inyectado.
From:sender@domain.com%0ATo:attacker@domain.com
El mensaje se enviará al destinatario original y a la cuenta del atacante.
Inyectar el argumento Asunto
From:sender@domain.com%0ASubject:This is%20Fake%20Subject
El asunto falso se agregará al asunto original y en algunos casos lo reemplazará. Depende del comportamiento del servicio de correo.
Cambiar el cuerpo del mensaje
Inyecta un salto de línea de dos líneas y luego escribe tu mensaje para cambiar el cuerpo del mensaje.
From:sender@domain.com%0A%0AMy%20New%20%0Fake%20Message.
Explotación de la función mail() de PHP
The mail()
function in PHP is commonly used to send emails from a web application. However, if not properly secured, it can be vulnerable to email injection attacks. Email injection occurs when an attacker is able to inject malicious content into the email headers, allowing them to manipulate the email's behavior.
La función mail()
en PHP se utiliza comúnmente para enviar correos electrónicos desde una aplicación web. Sin embargo, si no está debidamente asegurada, puede ser vulnerable a ataques de inyección de correo electrónico. La inyección de correo electrónico ocurre cuando un atacante puede inyectar contenido malicioso en los encabezados del correo electrónico, lo que les permite manipular el comportamiento del correo electrónico.
How email injection works
Cómo funciona la inyección de correo electrónico
Email injection attacks typically occur when user-supplied data is not properly validated or sanitized before being used in the mail()
function. Attackers can exploit this vulnerability by injecting special characters into the email headers, such as newline characters (\n) or carriage return characters (\r).
Los ataques de inyección de correo electrónico generalmente ocurren cuando los datos proporcionados por el usuario no se validan o se desinfectan correctamente antes de ser utilizados en la función mail()
. Los atacantes pueden explotar esta vulnerabilidad inyectando caracteres especiales en los encabezados del correo electrónico, como caracteres de nueva línea (\n) o caracteres de retorno de carro (\r).
Impact of email injection
Impacto de la inyección de correo electrónico
Email injection can have various consequences, including:
La inyección de correo electrónico puede tener diversas consecuencias, incluyendo:
-
Spamming: Attackers can use email injection to send spam emails from the compromised application, potentially damaging the reputation of the sender's domain.
-
Spamming: Los atacantes pueden utilizar la inyección de correo electrónico para enviar correos electrónicos no deseados desde la aplicación comprometida, lo que podría dañar la reputación del dominio del remitente.
-
Phishing: By injecting malicious content into the email headers, attackers can trick recipients into revealing sensitive information or performing actions that they shouldn't.
-
Phishing: Al inyectar contenido malicioso en los encabezados del correo electrónico, los atacantes pueden engañar a los destinatarios para que revelen información confidencial o realicen acciones que no deberían realizar.
-
Email spoofing: Email injection can be used to spoof the sender's email address, making it appear as if the email was sent from a different source. This can be used for impersonation or to deceive recipients.
-
Suplantación de identidad en el correo electrónico: La inyección de correo electrónico se puede utilizar para falsificar la dirección de correo electrónico del remitente, haciendo que parezca que el correo electrónico se envió desde una fuente diferente. Esto se puede utilizar para suplantación de identidad o para engañar a los destinatarios.
Prevention techniques
Técnicas de prevención
To prevent email injection attacks, it is important to properly validate and sanitize user-supplied data before using it in the mail()
function. Here are some techniques to prevent email injection:
Para prevenir ataques de inyección de correo electrónico, es importante validar y desinfectar correctamente los datos proporcionados por el usuario antes de utilizarlos en la función mail()
. Aquí hay algunas técnicas para prevenir la inyección de correo electrónico:
-
Input validation: Implement strict input validation to ensure that user-supplied data does not contain any special characters that could be used for email injection.
-
Validación de entrada: Implemente una validación estricta de entrada para asegurarse de que los datos proporcionados por el usuario no contengan caracteres especiales que puedan ser utilizados para la inyección de correo electrónico.
-
Input sanitization: Sanitize user-supplied data by removing or encoding any special characters that could be used for email injection.
-
Desinfección de entrada: Desinfecte los datos proporcionados por el usuario eliminando o codificando cualquier carácter especial que pueda ser utilizado para la inyección de correo electrónico.
-
Use email libraries: Instead of using the
mail()
function directly, consider using email libraries or frameworks that provide built-in protection against email injection attacks. -
Utilice bibliotecas de correo electrónico: En lugar de utilizar la función
mail()
directamente, considere utilizar bibliotecas o frameworks de correo electrónico que proporcionen protección incorporada contra ataques de inyección de correo electrónico.
By implementing these prevention techniques, you can significantly reduce the risk of email injection attacks and ensure the security of your web application.
Al implementar estas técnicas de prevención, puede reducir significativamente el riesgo de ataques de inyección de correo electrónico y garantizar la seguridad de su aplicación web.
# The function has the following definition:
php --rf mail
Function [ <internal:standard> function mail ] {
- Parameters [5] {
Parameter #0 [ <required> $to ]
Parameter #1 [ <required> $subject ]
Parameter #2 [ <required> $message ]
Parameter #3 [ <optional> $additional_headers ]
Parameter #4 [ <optional> $additional_parameters ]
}
}
El quinto parámetro ($additional_parameters)
Esta sección se basará en cómo abusar de este parámetro suponiendo que un atacante lo controle.
Este parámetro se agregará a la línea de comandos que PHP utilizará para invocar el binario sendmail. Sin embargo, se sanitizará con la función escapeshellcmd($additional_parameters)
.
Un atacante puede inyectar parámetros adicionales para sendmail en este caso.
Diferencias en la implementación de /usr/sbin/sendmail
La interfaz de sendmail es proporcionada por el software de correo electrónico MTA (Sendmail, Postfix, Exim, etc.) instalado en el sistema. Aunque la funcionalidad básica (como los parámetros -t -i -f) se mantiene igual por razones de compatibilidad, otras funciones y parámetros varían considerablemente según el MTA instalado.
Aquí hay algunos ejemplos de diferentes páginas de manual del comando/interface sendmail:
- Sendmail MTA: http://www.sendmail.org/~ca/email/man/sendmail.html
- Postfix MTA: http://www.postfix.org/mailq.1.html
- Exim MTA: https://linux.die.net/man/8/eximReferences
Dependiendo del origen del binario sendmail, se han descubierto diferentes opciones para abusar de ellos y filtrar archivos o incluso ejecutar comandos arbitrarios. Mira cómo en https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html
Inyectar en el nombre del correo electrónico
Partes ignoradas de un correo electrónico
Los símbolos: +, - y {} en raras ocasiones se pueden usar para etiquetar y ser ignorados por la mayoría de los servidores de correo electrónico
Los comentarios entre paréntesis () al principio o al final también se ignorarán
- Ejemplo: john.doe(intigriti)@example.com → john.doe@example.com
Bypass de lista blanca
Comillas
IPs
También puedes usar IPs como nombres de dominio entre corchetes:
- john.doe@[127.0.0.1]
- john.doe@[IPv6:2001:db8::1]
Otras vulnerabilidades
SSO de terceros
XSS
Algunos servicios como github o salesforce permiten crear una dirección de correo electrónico con payloads XSS. Si puedes usar estos proveedores para iniciar sesión en otros servicios y estos servicios no sanitizan correctamente el correo electrónico, podrías causar XSS.
Toma de cuenta
Si un servicio de SSO te permite crear una cuenta sin verificar la dirección de correo electrónico proporcionada (como salesforce) y luego puedes usar esa cuenta para iniciar sesión en un servicio diferente que confía en salesforce, podrías acceder a cualquier cuenta.
Ten en cuenta que salesforce indica si el correo electrónico proporcionado fue verificado o no, pero la aplicación debe tener en cuenta esta información.
Reply-To
Puedes enviar un correo electrónico utilizando From: company.com** ** y Replay-To: attacker.com y si se envía alguna respuesta automática debido a que el correo electrónico se envió desde una dirección interna, el atacante podría recibir esa respuesta.
Tasa de rebote duro
Algunas aplicaciones como AWS tienen una Tasa de rebote duro (en AWS es del 10%), que bloquea el servicio de correo electrónico cada vez que está sobrecargado.
Un rebote duro es un correo electrónico que no se pudo entregar por alguna razón permanente. Tal vez la dirección de correo electrónico sea falsa, tal vez el dominio del correo electrónico no sea un dominio real, o tal vez el servidor del destinatario del correo electrónico no acepte correos electrónicos, eso significa que de un total de 1000 correos electrónicos, si 100 de ellos son falsos o inválidos y causan que todos reboten, AWS SES bloqueará tu servicio.
Entonces, si puedes enviar correos electrónicos (quizás invitaciones) desde la aplicación web a cualquier dirección de correo electrónico, podrías provocar este bloqueo enviando cientos de invitaciones a usuarios y dominios inexistentes: Denegación de servicio del servicio de correo electrónico.
Referencias
- https://resources.infosecinstitute.com/email-injection/
- https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html
- https://drive.google.com/file/d/1iKL6wbp3yYwOmxEtAg1jEmuOf8RM8ty9/view
- https://www.youtube.com/watch?app=desktop&v=4ZsTKvfP1g0
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Obtén el swag oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de Telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PRs al repositorio de hacktricks y al repositorio de hacktricks-cloud.
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}