hacktricks/pentesting-web/email-injections.md
2023-07-07 23:42:27 +00:00

16 KiB
Raw Blame History

メールインジェクション


Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築および自動化します。
今すぐアクセスを取得:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

送信済みメールにインジェクト

送信者引数の後にCcとBccをインジェクトする

From:sender@domain.com%0ACc:recipient@domain.co,%0ABcc:recipient1@domain.com

引数の注入

The message will be sent to the recipient and recipient1 accounts.

メッセージは、受信者と受信者1のアカウントに送信されます。

From:sender@domain.com%0ATo:attacker@domain.com

メッセージは元の受信者と攻撃者のアカウントに送信されます。

Subject引数を注入する

From:sender@domain.com%0ASubject:This is%20Fake%20Subject

偽の件名は元の件名に追加され、場合によっては置き換えられます。これはメールサービスの動作に依存します。

メッセージの本文を変更する

2行の改行を挿入し、メッセージの本文を変更するためにメッセージを書き込んでください。

From:sender@domain.com%0A%0AMy%20New%20%0Fake%20Message.

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.

PHP mail() 関数は、ウェブアプリケーションから電子メールを送信するために一般的に使用されます。しかし、適切に保護されていない場合、メールインジェクション攻撃の脆弱性にさらされる可能性があります。メールインジェクションは、攻撃者が電子メールのヘッダーを操作し、悪意のあるコンテンツを電子メールに注入することができる場合に発生します。

Exploiting Email Injection

To exploit email injection, an attacker can manipulate the email headers by injecting special characters such as newline characters (\n) or carriage return characters (\r). This allows the attacker to add additional headers or modify existing ones.

メールインジェクションを悪用するために、攻撃者は改行文字(\nや復帰文字\rなどの特殊文字を注入することで、電子メールのヘッダーを操作することができます。これにより、攻撃者は追加のヘッダーを追加したり、既存のヘッダーを変更したりすることができます。

For example, consider the following vulnerable code:

例えば、以下の脆弱なコードを考えてみましょう:

<?php
$to = $_POST['to'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$headers = "From: " . $_POST['from'] . "\r\n";
mail($to, $subject, $message, $headers);
?>

In this code, the values for the to, subject, message, and from parameters are taken from user input without proper validation or sanitization. This allows an attacker to inject additional headers by manipulating the from parameter.

このコードでは、tosubjectmessagefrom パラメータの値が適切な検証やサニタイズなしにユーザーの入力から取得されます。これにより、攻撃者は from パラメータを操作して追加のヘッダーを注入することができます。

To exploit this vulnerability, an attacker can craft a malicious from parameter value that includes additional headers:

この脆弱性を悪用するために、攻撃者は追加のヘッダーを含む悪意のある from パラメータの値を作成することができます:

from: attacker@example.com\r\nBcc: victim@example.com

When the vulnerable code is executed, the email will be sent with the injected headers. This can lead to various attacks, such as email spoofing, information disclosure, or even remote code execution.

脆弱なコードが実行されると、注入されたヘッダーを含む電子メールが送信されます。これにより、電子メールのスプーフィング、情報の漏洩、さらにはリモートコードの実行など、さまざまな攻撃が発生する可能性があります。

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 the injection of special characters.

  • ユーザーの入力を検証およびサニタイズする:特殊文字の注入を防ぐために、ユーザーの入力が適切に検証およびサニタイズされていることを確認します。

  • Use a secure email library: Instead of using the mail() function, consider using a secure email library that handles email headers properly and provides protection against email injection attacks.

  • 安全な電子メールライブラリを使用する:mail() 関数の代わりに、電子メールのヘッダーを適切に処理し、電子メールインジェクション攻撃に対する保護を提供する安全な電子メールライブラリを使用することを検討してください。

  • 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.

  • 入力の検証とフィルタリングの実装:入力の検証とフィルタリングメカニズムを実装して、ユーザーの入力が予想される形式に従っており、悪意のあるコンテンツを含んでいないことを確認します。

By following these practices, you can mitigate the risk of email injection attacks and ensure the security of your web application.

これらのプラクティスに従うことで、電子メールインジェクション攻撃のリスクを軽減し、ウェブアプリケーションのセキュリティを確保することができます。

# 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によって大きく異なります。

以下は、sendmailコマンド/インターフェースの異なるマニュアルのいくつかの例です:

sendmailの起源によって、それらを悪用してファイルを漏洩させたり、任意のコマンドを実行したりするためのさまざまなオプションが発見されています。https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.htmlで詳細を確認してください。

メール名へのインジェクション

メールの無視される部分

記号:+、-、**{}**は、稀な場合にタグ付けや無視されることがあります。

丸括弧()で囲まれたコメントは、先頭または末尾にある場合も無視されます。

ホワイトリストの回避

引用符

IPアドレス

IPアドレスもドメイン名として角括弧で囲んで使用することができます

  • john.doe@[127.0.0.1]
  • john.doe@[IPv6:2001:db8::1]

その他の脆弱性

サードパーティのSSO

XSS

githubsalesforceなどの一部のサービスでは、XSSペイロードを含むメールアドレスを作成することができます。このプロバイダーを使用して他のサービスにログインできる場合、このサービスがメールを正しくサニタイズしていない場合、XSSを引き起こすことができます。

アカウント乗っ取り

salesforceのようなSSOサービスが、与えられたメールアドレスを確認せずにアカウントを作成することを許可してくれる場合、そのアカウントをsalesforceを信頼している別のサービスに使用することができます。これにより、任意のアカウントにアクセスできます。
なお、salesforceは与えられたメールが確認されたかどうかを示していますが、アプリケーションはこの情報を考慮する必要があります。

Reply-To

_From: company.comReplay-To: attacker.com_を使用してメールを送信し、メールが内部アドレスから送信されたために自動返信が送信される場合、攻撃者はその応答受け取ることができるかもしれません。

ハードバウンス率

AWSなどの一部のアプリケーションには、ハードバウンス率AWSでは10%)があり、メールサービスが過負荷になるとブロックされます。

ハードバウンスとは、永久的な理由で配信できなかったメールのことです。メールアドレスが偽のアドレスであるか、メールドメインが実在しないドメインであるか、またはメール受信者のサーバーがメールを受け入れない場合などが考えられます。つまり、1000通のメールのうち100通が偽であるか無効であり、それによってすべてのメールがバウンスした場合、AWS SESはサービスをブロックします。

したがって、Webアプリケーションから任意のメールアドレスにメールおそらく招待状を送信できる場合、存在しないユーザーやドメインに何百もの招待状を送信することで、このブロックを引き起こすことができますメールサービスのDoS攻撃。

参考文献

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
  • サイバーセキュリティ企業で働いていますか? HackTricksであなたの会社を宣伝したいですかまたは、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたりしたいですかSUBSCRIPTION PLANSをチェックしてください!
  • The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
  • 公式のPEASSHackTricksグッズを手に入れましょう。
  • 💬 [Discordグ Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築**し、自動化することができます。 今すぐアクセスを取得してください:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}