前提
- 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に変更する
# ファイルへのアクセス許可する
root@kali:~# service apache2 start
# DB_createできるようにする
root@kali:~# service mysql start
- SQL Injection(Blind)にアクセスする(左メニューにある)
インジェクション開始
- まずは、ログインフォームが機能するか確認
- 取り合えず「1」を入力しsubmitすると反応はあるが、ユーザーが存在するかどうかしか分からないので、これでは情報を盗めそうにない。
- そこでsqlmapを用いて、命令文を流しまくって脆弱性をみつけたい
- sqlmapを機能させるためにcookie情報を取得する。
- 前提としてsqlmapにて命令文を流すためには、ページにアクセスできる状態である必要がある。つまり今回の場合、login_sessionを保持しているcookieが必要である。これを持っていれば、ログインしている状態となり、sqlmapからも本ページへアクセスできる。
- 取り合えずsubmit押していれば、networkにはデータが入り、そこからcookieを確認できる。
- sqlmapを用いて脆弱性を見つける
- 必要なのはsubmit時のクエリ込みのurlとcookie
- あとはsqlmap側でクエリを良しなに変更し試し打ちしてくれる。
- sqlmapを実行した結果、脆弱性が少なくとも2つあることが分かった。
# -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"と略す
# DB取得
"SQLMAP-BASE" --dbs
# DB:dvwa内のテーブル
"SQLMAP-BASE" -D dvwa --tables
# DB:dvwa内のtable:usersのカラム
"SQLMAP-BASE" -D dvwa -T users --column
- user/passwordを奪取する
- 以下コマンドを実行する。
# DB:dvwa内のtable:usersのcolumn:passwordを解析する
"SQLMAP-BASE" -D dvwa -T users -C user,password --dump
おわり