本記事の概要
意図的に脆弱性が存在するWebサーバであるDVWAのSQL Injectionカテゴリの脆弱性の演習の流れを記載します。
SQL Injectionの脆弱性を悪用されると、任意のSQLを実行される可能性があります。
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のSQL Injection攻撃のやり方(レベル:Low)
(1) DVWAのSQL Injection演習のソースコードは以下の通りです。
<?php    
if(isset($_GET['Submit'])){
    
    // Retrieve data
    
    $id = $_GET['id'];
    $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
    $result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );
    $num = mysql_numrows($result);
    $i = 0;
    while ($i < $num) {
        $first = mysql_result($result,$i,"first_name");
        $last = mysql_result($result,$i,"last_name");
        
        echo '<pre>';
        echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
        echo '</pre>';
        $i++;
    }
}
?>
(2) ユーザの入力値を文字列連結して、SQLを実行していますので、任意のSQL文を実行できます。例えば、以下のような文字列を送信すると、任意のデータを表示できます。
[例1:ユーザ一覧を表示 の画面]

[例2:UNION SELECTでの任意のデータ表示 の画面]

DVWAのSQL Injection攻撃のやり方(レベル:Medium)
(1) DVWAのSQL Injectionの演習のソースコードは以下の通りです。
<?php
if (isset($_GET['Submit'])) {
    // Retrieve data
    $id = $_GET['id'];
    $id = mysql_real_escape_string($id);
    $getid = "SELECT first_name, last_name FROM users WHERE user_id = $id";
    $result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );
    
    $num = mysql_numrows($result);
    $i=0;
    while ($i < $num) {
        $first = mysql_result($result,$i,"first_name");
        $last = mysql_result($result,$i,"last_name");
        
        echo '<pre>';
        echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
        echo '</pre>';
        $i++;
    }
}
?>
(2) 演習のレベルLowと比較すると、以下の内容が追記されていますので、mysql_real_escape_string関数で特殊文字はエスケープ処理します。
$id = mysql_real_escape_string($id);
(3) ユーザの入力値を文字列連結して、SQLを実行していますので、任意のSQL文を実行できます。例えば、以下のような文字列を送信すると、任意のデータを表示できます。
【SQL文のフォーマット】
SELECT first_name, last_name FROM users WHERE user_id = [ユーザの入力値]
(1) 例:UNION SELECTでの任意のデータ表示
   ・入力値 : 1 or 1=1 UNION SELECT user, password FROM users#
   ・実行するSQL文 : SELECT first_name, last_name FROM users WHERE user_id = 1 or 1=1 UNION SELECT user, password FROM users#


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攻撃の 演習の例を記載します。 | 
 
  
  
  
  
