hacktricks/pentesting-web/email-injections.md

14 KiB

Inyecciones de Correo Electrónico


Utiliza Trickest para construir y automatizar flujos de trabajo con las herramientas comunitarias más avanzadas del mundo.
Obtén acceso hoy mismo:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

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 manipulate the email headers and inject malicious content into the email.

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á correctamente 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 manipular los encabezados del correo electrónico e inyectar contenido malicioso en el correo electrónico.

How email injection works

The email injection attack takes advantage of the fact that the mail() function allows the headers of the email to be specified as a string parameter. If the application does not properly validate and sanitize user input, an attacker can inject additional headers or modify existing ones.

Cómo funciona la inyección de correo electrónico

El ataque de inyección de correo electrónico aprovecha el hecho de que la función mail() permite especificar los encabezados del correo electrónico como un parámetro de cadena. Si la aplicación no valida y desinfecta correctamente la entrada del usuario, un atacante puede inyectar encabezados adicionales o modificar los existentes.

Exploiting email injection

To exploit email injection, an attacker can craft a malicious payload that includes additional headers or modifies existing ones. For example, the attacker can inject a CC or BCC header to send a copy of the email to themselves or to other recipients without the knowledge of the original sender.

Explotando la inyección de correo electrónico

Para explotar la inyección de correo electrónico, un atacante puede crear una carga útil maliciosa que incluya encabezados adicionales o modifique los existentes. Por ejemplo, el atacante puede inyectar un encabezado CC o BCC para enviar una copia del correo electrónico a sí mismos o a otros destinatarios sin el conocimiento del remitente original.

Impact of email injection

The impact of email injection can vary depending on the attacker's intentions. Some possible consequences include:

  • Unauthorized access to sensitive information: By injecting a malicious payload, an attacker can potentially gain access to sensitive information contained in the email or perform actions on behalf of the original sender.
  • Spamming or phishing attacks: An attacker can use email injection to send spam or phishing emails to unsuspecting recipients, potentially leading to further compromise or financial loss.
  • Reputation damage: If an application is found to be vulnerable to email injection, it can damage the reputation of the organization or individual associated with the application.

Impacto de la inyección de correo electrónico

El impacto de la inyección de correo electrónico puede variar según las intenciones del atacante. Algunas posibles consecuencias incluyen:

  • Acceso no autorizado a información sensible: Al inyectar una carga útil maliciosa, un atacante puede potencialmente obtener acceso a información sensible contenida en el correo electrónico o realizar acciones en nombre del remitente original.
  • Ataques de spam o phishing: Un atacante puede utilizar la inyección de correo electrónico para enviar correos electrónicos de spam o phishing a destinatarios desprevenidos, lo que puede llevar a una mayor compromiso o pérdida financiera.
  • Daño a la reputación: Si se descubre que una aplicación es vulnerable a la inyección de correo electrónico, puede dañar la reputación de la organización o individuo asociado con la aplicación.
# 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:

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

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

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, utilizando las herramientas comunitarias más avanzadas del mundo.\ Obtén acceso hoy mismo:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}