HydraでHTTP(POSTフォーム)のログインページをブルートフォースアタックする方法についてメモ。
(Hydraの読み方はハイドラです。)
Hydraに必要な情報をBurp Suiteで取得する
Burp Suite上のブラウザを使ってターゲットのログインページにいく。
(Burp Suiteを開いて、Proxy > Intercept > Open Browser)
まず試しに適当なユーザネームとパスワードの組み合わせでログインを試みる。
Username: admin, Password: adminの組み合わせで試したところ次のように表示された:
このログイン失敗時に表示される文言をメモっておく。今回の場合は「Invalid Password!」
失敗時に表示される文章がまず必要なもの一つ目。
次に、Burp SuiteでProxy > HTTP historyと進み、先ほどログインした際のPOSTリクエストの履歴を見つける:
このPOSTリクエストより次をメモしておく:
- /department/login.php
- username=admin&password=admin
つまり、ログインページのパス(URL)と、POSTするデータおよびそのフォーマット。
これが必要なもの二つ目。
以上でBurp Suiteによる情報収集のステップは完了。
ここからは、得られた情報を使って実際にHydraでこのログインページに対してブルートフォースしていく。
ブラウザ開発者ツール
実は、上でみてきた情報を得るにはわざわざBurp SuiteやWireSharkを開く必要ない。
ターゲットのログインページにてブラウザの開発者ツールを開く(そのページで右クリックして「検証」をクリック)。
開発者ツールにて、「ネットワーク」タブをクリックして表示した状態で、最初のように適当なユーザネームとパスワードの組み合わせでログインを試みる:
Hydraに必要な、ログインページのパス(URL)ってのはそもそもURLのバーにあるhttp://10.10.10.43/department/login.phpから判断して「/department/login.php」をメモっておけばよい。
また、BurpのHTTP historyでみたPOSTリクエストで渡すデータおよびそのフォーマットについても、開発者ツールネットワークタブの、login.phpのデータにて「Payload」をクリックすれば表示される。
(開発者ツールでネットワークタブ押しても何も表示されていない場合は、その状態で開発者ツールを閉じずに再度適当な組み合わせでログインしてみる。そうすれば表示される。)
上のやつはChromeの開発者ツールだが、FireFoxの方がより正確:
FireFoxの方も、ネットワークタブでlogin.phpをクリックし「要求」をクリック。その後「生データ」に切り替えるとPOSTデータが表示される。
Hydraを使う
ここではユーザ名として「admin」、パスワードリストは「/usr/share/wordlists/rockyou.txt」を使う。
次のようにHydraのコマンドを実行すればよい:
hydra -V -f -l admin -P /usr/share/wordlists/rockyou.txt 10.10.10.43 http-post-form '/user/login.php:username=^USER^&password=^PASS^:Invalid Password!'
-V
で冗長に表示、-f
はログインに成功したらそのタイミングでブルートフォースを止める。
-l
でユーザ名を指定。-P
でパスワードリストを指定。
その後にターゲットのIPアドレスと、http-post-form
の指定。
それ以降の部分はにBurp Suiteで得られた情報を指定する:
'ログインページのパス:POSTリクエストデータフォーマット:失敗時の文言'
ただしPOSTリクエストデータフォーマットの部分においては、ユーザ名が入る部分に^USER^
を、パスワードが入る部分に^PASS^
と書く。
以上でHydraの書き方はOK。後はHydraを走らせて待つだけ。
パスワードリストではなく、一つのパスワードを指定したい場合は-p P@ssw0rd!
のように小文字のpを使う。
一つのユーザ名ではなく、ユーザ名のリストを使いたいなら-L users.txt
のように大文字のLにする。また、ユーザリストを使う場合は-u
オプションを指定するべし。
ユーザXに対して、全パスワードをブルートフォースしてから次のユーザYに対して再び全パスワード試行するというユーザ名固定のスタイルがデフォルト。-u
オプションでは、パスワードAに対してユーザ名だけ変えながらブルートフォースする。その次はパスワードBに対して再びユーザ名だけ変えながら試行する。とりあえず、大きめのユーザリストを使うなら-u
を指定しておくといい。
その他のHydraのオプション
-
-o ファイル名
:指定したファイルにhydraの実行結果を出力する -
-e n
:パスワードを空にして試行する -
-e s
:ユーザネームをパスワードとして試行する -
-e r
:ユーザネームを逆に読んだ文字列をパスワードとして試行する
(この-e nsr
のやつは単純にhydraコマンドの適当な場所に追記しておけば適用される)
ワードリストについて
ブールートフォースするならパスワードリストは/usr/share/wordlists/rockyou.txtが無難。
あとは/usr/share/seclists/下のワードリストが有能。ここならパスワードのリスト、ユーザネームのリスト、その他のリストやペイロード等いろいろ揃ってる。
ちなみに、本物のシステムに対してブルートフォースしたことないから分からないけど、rockyouってリアルワールドのターゲットに対してどれくらい当たるんだろ?
Hack The Boxとか学習用に用意されたターゲットのパスワードはだいたいrockyouに載ってるパスワードで当たるように設定されてるけど、ガチのペンテスターの方って何のワードリスト使ってるのでしょう?