hacktricks/pentesting-web/email-injections.md

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

引数の注入

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

An email injection attack can have serious consequences. It can allow an attacker to send spam emails, perform phishing attacks, or even execute arbitrary code on the server. To prevent email injection, it is important to properly sanitize and validate user input before using it in the mail() function.

メールインジェクション攻撃は重大な影響をもたらす可能性があります。攻撃者はスパムメールを送信したり、フィッシング攻撃を行ったり、サーバー上で任意のコードを実行したりすることができます。メールインジェクションを防ぐためには、mail() 関数で使用する前に、ユーザーの入力を適切にサニタイズ(無害化)および検証することが重要です。

Here are some best practices to prevent email injection:

以下は、メールインジェクションを防ぐためのベストプラクティスです。

  1. Validate user input: Ensure that user input is properly validated and sanitized before using it in the mail() function. Use input validation techniques such as regular expressions or input filters to ensure that the input does not contain any malicious characters.

    ユーザーの入力を検証する: mail() 関数で使用する前に、ユーザーの入力が適切に検証およびサニタイズされていることを確認します。正規表現や入力フィルタなどの入力検証技術を使用して、入力に悪意のある文字が含まれていないことを確認します。

  2. Separate email headers: When constructing email headers, make sure to separate the header fields from the user input using appropriate delimiters. This prevents the user input from being interpreted as part of the email headers.

    メールヘッダーを分離する: メールヘッダーを構築する際には、適切な区切り文字を使用してヘッダーフィールドとユーザーの入力を分離するようにします。これにより、ユーザーの入力がメールヘッダーの一部として解釈されることを防ぎます。

  3. Use email libraries: Instead of directly using the mail() function, consider using email libraries or frameworks that provide built-in protection against email injection attacks. These libraries often have built-in sanitization and validation mechanisms.

    メールライブラリを使用する: mail() 関数を直接使用する代わりに、メールインジェクション攻撃に対する組み込みの保護機能を提供するメールライブラリやフレームワークを使用することを検討してください。これらのライブラリには、しばしば組み込みのサニタイズおよび検証メカニズムがあります。

By following these best 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は与えられたメールが確認されたかどうかを示していますが、アプリケーションはこの情報を考慮する必要があります。

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グループ](https://discord.gg/hRep Trickestを使用して、世界で最も高度なコミュニティツールによって強化されたワークフローを簡単に構築し、自動化することができます。 今すぐアクセスを取得してください:

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