【ハッキング・ラボ⑮】Webアプリをハッキングする～DVWA～

Webアプリに対して、ハッキングをしていきます。

使用するのはDVWA（Damn Valunerable Web App）です。
DVWAは脆弱性のあるWebアプリの1つで、PHP、MySQLで構築されています。
<br>
まとめ記事（①〜⑯をまとめてます）
[【ハッキング・ラボのつくりかた】をやってみた](https://qiita.com/nakatatsu711/items/e90e6e0962bb787bf4a9)



## システム環境
`仮想化ソフト`：VirtualBox 6.1.0
`ホストOS`：Windows10
`ゲストOS1`：Kali Linux 2020.1
`ゲストOS2`：Windows7
`ゲストOS3`：Windows10
`ゲストOS4`：Metasploitable



## DVWAのインストール
まず、[DVWA](http://www.dvwa.co.uk/)をKali Linuxにダウンロードします。

以下のコマンドで、/rootディレクトリに移動し、解凍します。

```
# cp ダウンロードしたディレクトリ/DVWA-master.zip /root
# unzip DVWA-master.zip
```

Webサーバとして公開するため、ファイルを移動し、権限を変更します。

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

configファイルを正しいファイル名に修正します。

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

ApacheとMySQLを起動します。

```
# cd
# service apache2 start
# service mysql start
```

MySQLに接続して、DB接続用のアカウントを登録します。
ここでは、IDはnakatatsu、パスワードはpasswordとしました。

```
# mysql -u root -p
```

```
use mysql
GRANT ALL PRIVILEGES ON *.* 'nakatatsu'@'localhost' IDENTIFIED BY 'password';
```

以上を入力したら、Ctr+cキーで終了した後、mysqlを再起動します。

```
# service mysql restart
```

MySQLに接続できるようにするために、config.inc.phpファイルを編集します。

```
# vi /var/www/html/DVWA-master/config/config.inc.php
```

```:config.inc.php（編集前）
$_DVWA['db_server'] = '127.0.0.1';
$_DVWA['db_database'] = 'dvwa';
$_DVWA['db_user'] = 'dvwa';
$_DVWA['db_password'] = 'p@assw0rd';
```

```:config.inc.php（編集後）
$_DVWA['db_server'] = '127.0.0.1';
$_DVWA['db_database'] = 'dvwa';
$_DVWA['db_user'] = 'nakatatsu';
$_DVWA['db_password'] = 'password';
```

「Database Setup」画面にて、「Create / Reset Database」ボタンを押し、DVWAのデータベースを作成します。

最後に、Firefoxを起動して、`http://localhost/DVWA-master/login.php`にアクセスします。
Usernameにadmin、Passwordにpasswordを入力して、ログインします。

以上でDVWAのインストールは完了です。



## SQLインジェクション
SQLインジェクションとは、Webアプリが想定しないSQLを実行させて、DBを不正に操作する攻撃です。

「DVWA Security」を押して、セキュリティレベルをLowにし、「Submit」ボタンを押します。

最初に、SQLインジェクションを体験してみます。
メニューから「SQL Injection」を選びます。

「User ID」の入力欄に以下を入力してみます。
これは単純なSQLインジェクションのコードです。

```
1’ OR ‘a’=‘a
```

すると、次のような結果が得られ、単純なSQLインジェクションに対する脆弱性があることがわかります。
<img width="600" alt="hacking-lab-part15-1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/64abbfa9-ce14-0fbc-3684-036fefe82536.jpeg">

次に、DVWAが用いているカラムを特定します。
データベース名はdvwa、テーブル名はusersです。

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

すると、次のような結果が得られ、usersテーブルのカラム名がすべて判明しました。
<img width="600" alt="hacking-lab-part15-2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/f62c5a49-eef6-b1bb-c983-ca5274370b21.jpeg">

passwordというカラムがありますので、ここにパスワードが格納されていると推測できます。
そこで、以下を入力してみます。

```
' union select user, password from dvwa.users #
```

出力結果より、passwordに格納されているデータは、「パスワードのMD5ハッシュ値」と推測できます。
<img width="600" alt="hacking-lab-part15-3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/88891986-6bb7-4b9f-90df-1138b108d7aa.jpeg">

このMD5ハッシュ値を解析します。
ここでは、[MD5 Online](https://www.md5online.org/md5-decrypt.html)を使用します。

ユーザー名がgordonbのものを解析してみます。
パスワードはabc123とわかりました。
<img width="600" alt="hacking-lab-part15-4" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/8ef00415-6a67-e19b-f3eb-84d5d5259a88.jpeg">

ユーザー名がadmin、smithyはMD5ハッシュ値が同じなのですが、こちらは以下のようなエラーが出て、解析することはできませんでした。
<img width="600" alt="hacking-lab-part15-5" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/021161c7-56c5-7e75-3481-66938306cb91.jpeg">

一旦ログアウトして、再度`http://localhost/DVWA-master/`にアクセスします。
解析できたgordonbでログインを試みます。
ログインに成功しました。
<img width="600" alt="hacking-lab-part15-6" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1848126/0a4c9d8b-38d4-9586-4eb8-ed57bf4ecfb4.jpeg">