LoginSignup
3
4

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-05-11

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

3
4
3

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
  3. You can use dark theme
What you can do with signing up
3
4