DVWAのSQL Injectionの脆弱性の演習

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

本記事の概要

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

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

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:ユーザ一覧を表示 の画面]
DVWAのSQL Injection脆弱性(1)
DVWAのSQL Injection脆弱性(2)

[例2:UNION SELECTでの任意のデータ表示 の画面]
DVWAのSQL Injection脆弱性(3)
DVWAのSQL Injection脆弱性(4)

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のSQL Injection脆弱性(5)
DVWAのSQL Injection脆弱性(6)

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