web-dev-qa-db-ja.com

CSRFメソッド:img vs iframe vs form / javascript

CSRFの実施方法について質問があります。 WebGoatでCSRFプロンプトバイパスレッスンを行いました(レッスン->クロスサイトスクリプティング-> CSRFプロンプトバイパス)。このレッスンでは、受信者がログインしているWebアプリに2つの悪意のあるリクエストを送信する電子メールメッセージを作成する必要があります。最初のリクエストは送金金額を設定します。 2つ目は、ユーザーが確認ページで[確認]​​をクリックしたときに送信される確認要求です。

リクエストをHTTP Postリクエストとして送信するJavaScriptコードを使用してタスクを解決しました。別のオプションとしては、フォームとJavaScriptを使用してフォームを自動的に送信する方法があります。

私の質問は、なぜsrcを必要なパラメーターを含むターゲットURLに設定したimgタグまたはiframeを使用してレッスンを解決するように思われるのですか? HTTPを使用して送金が行われることを期待しますPOSTリクエストではなく、GET。 JavaScriptコードを使用したり、CSRFの無効または問題のあるメソッドを形成したりする側面はありますか?前述のタスクと比較すると、実際的な違いはありますか? CookieをJavaScriptフェッチで送信したり、フォームを送信したりできるので、認証はそうではないと思います。

2
hubbabubba

JavaScript、IMOではなくこれらのタグを使用する理由は次のとおりです。
-初期の記事/出版物の例
-ユーザーが画像/ iframeを投稿できるアプリケーション(BBCode、Markdownなど)
-純粋なHTMLとデモの容易さ

以前の例ではimgまたはiframeタグを使用していました。JavaScriptXHRがまだ利用できず、おそらくすべてのブラウザーでスクリプトの実行が許可されているわけではないためです。また、ブラウザーでの実装の違いにより、スクリプトが簡単に壊れる可能性があります。
第2に、ユーザーがMarkdownまたはHTML imgタグを介して画像を投稿できるアプリケーションを見つけることは珍しくありません。ただし、JavaScriptスニペットやイベントハンドラーは許可されません。これらはすでに、以前より多くの視聴者をターゲットにするために使用されています。
第3に、JavaScriptを有効にしたり、NoScriptなどでブロックしたりする必要がありません。攻撃を実証するのは簡単で簡単です。

これらは私の推論にすぎません。本当の理由は異なり、私のものと矛盾するかもしれません。修正していただければ幸いです。

1
1lastBr3ath

上記のシナリオで、JavaScriptの概念実証よりもimgおよびiframeの使用を好む2つの主な理由を考えることができます。

  1. セキュリティ業界のメンバーの間で私が見ているこの共通の考え方は、概念実証の構築に関してシンプルさが鍵となることです。特定の問題を悪用するために最短のペイロードを作成しようとする人に遭遇することがよくあります。個人的な経験に基づくと、概念実証は理解しやすく、他のセキュリティ研究者と共有しやすい傾向があります(これは、XSSポリグロット [1] で見られるように、常にそうであるとは限りません)。その上、ペイロードを短くしてみるのも楽しいです(「 コードゴルフ 」を参照)。
  2. 問題の悪用に関しては、敵はおそらくできるだけ多くのEdgeケースをカバーしたいと思うでしょう。一部のユーザーはブラウザでJavaScriptを無効にするため、エクスプロイトは無害になります。非JSベースのエクスプロイトは、この潜在的な問題を解決します。
1
EdOverflow