- 1.クロスサイトスクリプティング(XSS)
- 2.DOMベースのXSS
- 3.クロスサイトリクエストフォージェリ(Cross Site Request Forgeris)
- 4.サーバサイドリクエストフォージェリ(Server Side Request Forgeris)
1.クロスサイトスクリプティング(XSS)
クロスサイトスクリプティング(XSS)に関して情報処理安全確保支援士試験の過去問では、「HTML出力文字列のエスケープ処理が不適切な場合、攻撃者の作成した不正なリンクによってWebサイトを閲覧した利用者のブラウザ上でスクリプトが実行される脆弱性(H23SC春PM2-2設問3(1))」と述べられています。クロスサイトという言葉の通り、複数のサイトにまたがった(クロスした)仕組みです。
別の過去問(H28秋SG午前問22)では、「クロスサイトスクリプディングの手口」として「Webアプリケーションに用意された入力フィールドに,悪意のあるJavaScriptコードを含んだデータを入力する」と述べられています。
クロスサイトスクリプティング(Cross Site Scripting)ですから、本来はCSSという略になります。でも、スタイルシート(CSS:Cascading Style Sheets)と混同するのでXSSになりました。
簡単な例を紹介します。
以下のスクリプトを掲示板に投稿すると、その掲示板ではJavaScriptにより、悪意のサイトが起動します。
<script>window.open('http://ポップアップする悪意サイト');</script>
では、具体的に見て行きましょう。
(1)通常の場合
掲示板の投稿欄に「こんばんは」と入力すると、その結果が「こんばんは」として表示されます。
(2)XSSの脆弱性がある場合
掲示板の投稿欄にスクリプトを埋め込むと、悪意のあるサイトがポップアップします。ポップアップするサイトは、設定により、URLやステータスバーなどを消すことも可能です。利用者に、悪意のサイトとは気付かせないこともできるでしょう。うまくやれば、ここで、個人情報などを入力させることができます。
または、以下を書き込むと、自動で悪意のサイトに遷移します。
<script>document.location = "http://本物に似せた悪意サイト/"; </script>
ここで、本物そっくりのサイトにすれば、利用者は知らず知らずに個人情報などを入力してしまうかもしれませんね。
■参考となるサイト
IPAのサイトで、巧みなXSSの脆弱性が動画で解説されています。
https://www.youtube.com/watch?v=5OF51SNJHxA
クロスサイトスクリプティングの巧妙な例は、以下に述べられています。ご参考まで。
http://itpro.nikkeibp.co.jp/article/NEWS/20060619/241207/
■実際にやってみる
以下のサイトをそのままコピーして作成しました。(ありがとうございます)
https://www.websec-room.com/2013/03/14/567
ログインURLは以下です。
http://203.0.113.62/xss/xss.php
①Cookieを取得してみる
入力する文字は以下です。
"><script>alert(document.cookie)</script><!--
Submit後の以下のHTMLはどうなるかというと、
http://203.0.113.62/xss/xss_confirm.php
html:xss_confirm.php <html> <body> <h1>User RESIST CONFIRM</h1> <form action="xss_regist.php" method="get"> name:"><script>alert(document.cookie)</script><!--<br/> URL:<br/> <input type="hidden" name="name" value=""><script>alert(document.cookie)</script><!--"> <input type="hidden" name="url" value=""> <input type="submit" value="RESIST"> <input type="button" value="BACK" onclick="javascript:history.back();"> </form> </body> </html>
つまり、<script>alert(document.cookie)</script>が実行され、それ以降は<!-- であり、コメントアウトされます。
以下のように、クエリ文字列として、以下のような値を指定したURLを送り込み、クリックさせてScriptを実行させる。先頭のドメインが日ごろ使っているドメインであれば、不正はないと思ってクリックしてしまうのである。
http://203.0.113.62/xss/xss_confirm.php?name=%22%3E%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E%3C%21--&url=
②単にアラートでhelloと表示する
http://54.250.246.220/xss_confirm.php?name=%22%3E%3Cscript%3Ealert%28%27hello%27%29%3C%2Fscript%3E%3C%21--&url=
③ページを遷移させる
次は以下を入れてみよう。1秒かかるかかからないくらいで別のページに遷移する。
"><script>window.location='http://nw.seeeko.com';
こちらも同様で、不正なクエリ文字列を付与することで、罠サイトに誘導されてしまいます。
http://203.0.113.62/xss/xss_confirm.php?name=%22%3E%3Cscript%3Ewindow.location%3D%27http%3A%2F%2Fnw.seeeko.com%27%3B%3C%2Fscript%3E%3C%21--
■クロスサイトスクリプティング(XSS)の過去問
情報処理安全確保支援士試験の過去問(H28SC春午後1問1)で、クロスサイトスクリプティングの例を見てみましょう。
クロスサイトスクリプティングの例(H28SC春午後1問1) |
---|
Nさん:XSS脆弱性の影響は,警告ダイアログの表示だけではありません。例えば,攻撃者は,URLパラメタであるkeywordに攻撃用の文字列としてを組み込んだhttps://kensho.m-sha.co.jp/Gamen2_2へのリンクを含む電子メールを作成し,被害者に送付します。被害者がそのリンクをクリックした場合,図3の画面2-2ではなく,図5のように改変された画面2-2'が表示されます。このときのhttps://wana.example.jp/Login.jsのスクリプトは,図6のとおりです。 Nさん:被害者が画面2-2'でメンバIDとパスワードを入力すると,それらは[ a ]というホスト名のWebサーバに送信されます。この場合,画面2-2'が表示された時点で,被害者が偽のログインフォームだと気付くかというと,それは難しいでしょう。 J主任:なるほど。こんな被害が発生するのですね。 設問1(1) [ a ]に入れる適切な字句を、FQDNで答えよ。 |
この問題には前段がありますので少し補足します。以下の画面2-1のように、キーワードを入れるとその結果が画面2-2のように表示されます。
以下は、「チョコ」というキーワードを入れた画面です。
右の画面2-2のURLは、https://kensho.m-sha.co.jp/Gamen2_2?keyword=チョコ です。
問題文にあるように、ここで、https://kensho.m-sha.co.jp/Gamen2_2?keyword=