「セキュリティや脆弱性について知りたい・・・」
「SQLインジェクションとは実際にどうするの?」
「脆弱性を実際のコードで確認したい」
このような場合には、DVWAがオススメになります。
この記事では、DVWAをUbuntuにインストールする方法を解説しています。
本記事の内容
- DVWAとは?
- DVWAのシステム要件
- DVWAのインストール
- DVWAの動作確認
それでは、上記に沿って解説していきます。
DVWAとは?
DVWAとは、Damn Vulnerable Web Applicationの略称です。
日本語で表現すれば、クソ脆弱なWebアプリケーションとなります。
DVWAには、意図的に脆弱性が詰め込まれています。
これは、脆弱性の理解・学習のために用意されています。
したがって、DVWAは外部に公開してはいけません。
個人情報漏えいの問題がなくても、それ以外の攻撃を受ける可能性があります。
そうしたら、サーバー自体に無駄な負荷を与えることにもなりかねません。
最悪、ファイル破損などもあり得ます。
共用サーバーとかでそんなシステムがあれば、迷惑極まりないです。
そのため、DVWAは閉じた環境で利用しましょう。
以上、DVWAについて説明しました。
次は、DVWAのシステム要件を説明します。
DVWAのシステム要件
DVWAのバージョンについては、GitHub上のchangelogを確認します。
DVWA/CHANGELOG.md at master · digininja/DVWA · GitHub
https://github.com/digininja/DVWA/blob/master/CHANGELOG.md

DVWAの正式版は、1.9が最新となっています。
これは、もうかなり古いです。
1.10をGitHubから取得できるので、これを利用するようにしましょう。
DVWAのシステム要件は、以下。
- Apache
- PHP
- MariaDB(MySQLでも可)
DVWA自体が、PHPで開発されたWebシステムに過ぎません。
そのため、システム要件は上記のようになります。
今回は、UbuntuでDVWAを動かすことを想定しています。
その前提として、Ubuntuへ各種ソフトウェアをインストールする必要があります。
WindowsにDVWAをインストールする方法は、次の記事でまとめています。
Apacheについては、最新版をインストールしましょう。
DVWAを外部公開しないとは言え、致命的な脆弱性は避けておきたいです。
PHPとMariaDBについては、最新にこだわる必要はありません。
そこで公式で紹介されているインストールコマンドを利用します。
apt-get -y install mariadb-server php php-mysqli php-gd libapache2-mod-php
以上、DVWAのシステム要件を説明しました。
次は、DVWAのインストールを説明します。
DVWAのインストール
DVWAのインストールは、次の手順に沿って説明します。
- DVWAのダウンロード・設置
- DVWAの設定ファイル作成
- DVWA用データベースの作成
- DVWAのセットアップ
DVWAのダウンロード・設置
ドキュメントルート以下で作業します。
Apacheのデフォルトであれば、「/var/www/html」以下となります。
場所を移動できたら、gitコマンドでプロジェクトを取得します。
各自の環境に合わせて「sudo」を付けてください。
$ pwd /var/www/html $ git clone https://github.com/digininja/DVWA.git
処理が完了したら、DVWAディレクトリを確認できます。
これでDVWAのダウンロード・設置は、完了となります。
DVWAの設定ファイル作成
設置したDVWA以下のsetup.phpにアクセスしましょう。
今回の検証では、「192.168.33.200」をIPアドレスに持つサーバーにDVWAをインストールしています。
IPアドレスの確認方法は、次の記事で説明しています。
今回は、次のようなURLにアクセスすることになります。
http://192.168.33.200/DVWA/setup.php
このURLにブラウザでアクセスすると、次のようなエラーが表示されるはずです。
DVWA System error - config file not found. Copy config/config.inc.php.dist to config/config.inc.php and configure to your environment.
デフォルトでは、設定ファイルが存在していません。
設定ファイルは、DVWA/configに設置することになります。
まず、その場所に移動。
テンプレとして用意されているファイルをそのまま利用します。
$ mv config.inc.php.dist config.inc.php
config.inc.php
<?php # If you are having problems connecting to the MySQL database and all of the variables below are correct # try changing the 'db_server' variable from localhost to 127.0.0.1. Fixes a problem due to sockets. # Thanks to @digininja for the fix. # Database management system to use $DBMS = 'MySQL'; #$DBMS = 'PGSQL'; // Currently disabled # Database variables # WARNING: The database specified under db_database WILL BE ENTIRELY DELETED during setup. # Please use a database dedicated to DVWA. # # If you are using MariaDB then you cannot use root, you must use create a dedicated DVWA user. # See README.md for more information on this. $_DVWA = array(); $_DVWA[ 'db_server' ] = '127.0.0.1'; $_DVWA[ 'db_database' ] = 'dvwa'; $_DVWA[ 'db_user' ] = 'dvwa'; $_DVWA[ 'db_password' ] = 'p@ssw0rd'; $_DVWA[ 'db_port'] = '3306'; # ReCAPTCHA settings # Used for the 'Insecure CAPTCHA' module # You'll need to generate your own keys at: https://www.google.com/recaptcha/admin $_DVWA[ 'recaptcha_public_key' ] = ''; $_DVWA[ 'recaptcha_private_key' ] = ''; # Default security level # Default value for the security level with each session. # The default is 'impossible'. You may wish to set this to either 'low', 'medium', 'high' or impossible'. $_DVWA[ 'default_security_level' ] = 'impossible'; # Default PHPIDS status # PHPIDS status with each session. # The default is 'disabled'. You can set this to be either 'enabled' or 'disabled'. $_DVWA[ 'default_phpids_level' ] = 'disabled'; # Verbose PHPIDS messages # Enabling this will show why the WAF blocked the request on the blocked request. # The default is 'disabled'. You can set this to be either 'true' or 'false'. $_DVWA[ 'default_phpids_verbose' ] = 'false'; # Default locale # Default locale for the help page shown with each session. # The default is 'en'. You may wish to set this to either 'en' or 'zh'. $_DVWA[ 'default_locale' ] = 'en'; define ("MYSQL", "mysql"); define ("SQLITE", "sqlite"); # SQLi DB Backend # Use this to switch the backend database used in the SQLi and Blind SQLi labs. # This does not affect the backend for any other services, just these two labs. # If you do not understand what this means, do not change it. $_DVWA["SQLI_DB"] = MYSQL; #$_DVWA["SQLI_DB"] = SQLITE; #$_DVWA["SQLITE_DB"] = "sqli.db"; ?>
この設定ファイル内にDVWAで用いるデータベースに関しても記載されています。
基本的には、変更せずに利用しましょう。
DVWA用データベースの作成
DVWA用のデータベースを新規に作成します。
そして、そのデータベースを利用するDBユーザーも新規で作成することになります。
まずは、データベースに接続。
$ sudo mariadb
データベース・ユーザーは、config.inc.phpの値をもとに用意します。
$_DVWA = array(); $_DVWA[ 'db_server' ] = '127.0.0.1'; $_DVWA[ 'db_database' ] = 'dvwa'; $_DVWA[ 'db_user' ] = 'dvwa'; $_DVWA[ 'db_password' ] = 'p@ssw0rd'; $_DVWA[ 'db_port'] = '3306';
上記内容をもとにクエリを実行します。
MariaDB [(none)]> create database dvwa; Query OK, 1 row affected (0.000 sec) MariaDB [(none)]> create user dvwa@localhost identified by 'p@ssw0rd'; Query OK, 0 rows affected (0.000 sec) MariaDB [(none)]> grant all on dvwa.* to dvwa@localhost; Query OK, 0 rows affected (0.000 sec) MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.000 sec) MariaDB [(none)]>
DVWAのセットアップ
準備が整えば、セットアップを行います。
セットアップページにアクセス。
http://192.168.33.200/DVWA/setup.php
状況を自動的にチェックしてくれます。

「No」と記載されている箇所は、書き込み権限を対象に付与します。
DVWA自体は外部公開することはないので、次のように適当で構いません。
$ chmod 777 /var/www/html/DVWA/hackable/uploads/ $ chmod 777 /var/www/html/DVWA/external/phpids/0.6/lib/IDS/tmp/phpids_log.txt $ chmod 777 /var/www/html/DVWA/config
再度チェック後、次のように「Yes」になればOKです。

ここまで条件が揃えば、データベースを作成しましょう。
「Create / Reset Database」ボタンをクリック。

処理が終わると、ログインページに遷移します。
DVWAのインストールは、これで終わりです。
以上、DVWAのインストールを説明しました。
次は、DVWAの動作確認を行います。
DVWAの動作確認
まずは、ログインページからログインしてみましょう。

アカウント情報は、次を利用します。

ブルートフォースアタックを容易に実現できるように設定されています。
普通は、こんなアカウントはアウトですからね。
ログインに成功したら、次のようなページが表示されます。

これは、パスワードが危険過ぎることをChromeが警告しています。
とりあえず、これは「OK」で閉じます。
画面内に次のようなメニューを確認できます。

各種攻撃です。
選択した攻撃を実行できるようになっています。

この画面では、SQLインジェクションを試すことが可能です。
ID(数値)を入力したら、ユーザー名を取得できる機能になります。

この機能には、SQLインジェクションの攻撃を受ける脆弱性が存在しています。
実際にその脆弱性を確かめるには、DVWAのセキュリティレベルを変更する必要があります。
メニューから、「DVWA Security」を選択。

この画面でセキュリティレベルを変更します。

デフォルトでは、「Impossible」と設定されています。
攻撃不可ということです。
これを「Low」に変更しましょう。

「Low」を選択して、「Submit」ボタンをクリック。

「Impossible」から「Low」にセキュリティレベルが変わりました。
では、先ほどのSQLインジェクションを試してみましょう。
典型的な攻撃を行います。
対象一覧を取得する攻撃です。

上記を実行すると、次のような結果となります。

全ユーザーが判明しました。
ここから、さらにパスワードなどの情報を求めていく攻撃へとつながっていくわけです。
以上、DVWAの動作確認を説明しました。