search
LoginSignup
1

posted at

updated at

HydraでHTTPのログインをブルートフォース

HydraでHTTP(POSTフォーム)のログインページをブルートフォースアタックする方法についてメモ。

(Hydraの読み方はハイドラです。)

Hydraに必要な情報をBurp Suiteで取得する

Burp Suite上のブラウザを使ってターゲットのログインページにいく。

(Burp Suiteを開いて、Proxy > Intercept > Open Browser)
loginpage.png



まず試しに適当なユーザネームとパスワードの組み合わせでログインを試みる。

Username: admin, Password: adminの組み合わせで試したところ次のように表示された:
invalidcreds.png

このログイン失敗時に表示される文言をメモっておく。今回の場合は「Invalid Password!」

失敗時に表示される文章がまず必要なもの一つ目。



次に、Burp SuiteでProxy > HTTP historyと進み、先ほどログインした際のPOSTリクエストの履歴を見つける:
postreq.png

このPOSTリクエストより次をメモしておく:

  • /department/login.php
  • username=admin&password=admin

つまり、ログインページのパス(URL)と、POSTするデータおよびそのフォーマット。

これが必要なもの二つ目。



以上でBurp Suiteによる情報収集のステップは完了。

ここからは、得られた情報を使って実際にHydraでこのログインページに対してブルートフォースしていく。

ブラウザ開発者ツール

実は、上でみてきた情報を得るにはわざわざBurp SuiteやWireSharkを開く必要ない。

ターゲットのログインページにてブラウザの開発者ツールを開く(そのページで右クリックして「検証」をクリック)。

開発者ツールにて、「ネットワーク」タブをクリックして表示した状態で、最初のように適当なユーザネームとパスワードの組み合わせでログインを試みる:
devtool2.png

Hydraに必要な、ログインページのパス(URL)ってのはそもそもURLのバーにあるhttp://10.10.10.43/department/login.phpから判断して「/department/login.php」をメモっておけばよい。

また、BurpのHTTP historyでみたPOSTリクエストで渡すデータおよびそのフォーマットについても、開発者ツールネットワークタブの、login.phpのデータにて「Payload」をクリックすれば表示される。

devtool1.png

(開発者ツールでネットワークタブ押しても何も表示されていない場合は、その状態で開発者ツールを閉じずに再度適当な組み合わせでログインしてみる。そうすれば表示される。)

上のやつはChromeの開発者ツールだが、FireFoxの方がより正確:
forxdev.png

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に載ってるパスワードで当たるように設定されてるけど、ガチのペンテスターの方って何のワードリスト使ってるのでしょう?

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1