hydraの古い書き方、新しい書き方。
ひさびさにセキュリティっぽいことやろうかなと思って、いろんなツールを引っ張り出して遊んでおります。 hydraってオンラインの辞書攻撃ツールも使ったのですが、どうも新しいオプション指定の仕方に対応した記事が少ないようなので書いてみます。
なお当然のことですが、悪用厳禁でよろしくお願いします。節操無く振り回す馬鹿のせいで平和に遊んでるこっちまで石投げられちゃたまらんからね。
さて。hydraでBASIC認証を突破する方法を検索すると、以下のようなコマンドが出てきます。
$ hydra -l username -p password -s 8000 localhost http-get /secret
なんか、長い。
んじゃあログインフォームを使っているようなページはどうかというと、以下のような感じ。
$ hydra -l username -p password -s 8000 localhost http-get-form '/login:user=^USER^&pass=^PASS^:incorrect'
めちゃくちゃ長い。というか、なんか見辛い。
hydraのヘルプを見てみると、[service://server[:PORT][/OPT]]
って書いてあるんですよね。なんか構文が全然違う。
どうやら、上記の[server] [service] [OPT]
な書き方は古い書き方らしいです。
というわけで、新しい方の書き方に従って書いてみると以下のように。
$ hydra -l username -p password http://localhost:8000/secret
$ hydra -l username -p password 'http-get-form://localhost:8000/login:user=^USER^&pass=^PASS^:incorrect'
上がBASIC、下がフォームです。 BASIC認証なんか劇的にシンプルになってとても良い感じ。 フォームの方はオプションが長いので結局長いままですが、まあ見やすくはある、はず。
一応オプションについても簡単に解説しておきます。
-l
がユーザ名。ファイルから候補を読み込む場合は-L
のあとにファイル名。
-p
がパスワード。こちらもファイルから候補を読み込む場合は-P
のあとにファイル名。
古い構文で使っている-s
はお察しの通りポート番号です。新しい構文では必要なくなってちょっと嬉しい。
incorrect
の部分はログインに失敗したときに表示される文字列。この文字列が応答に含まれていなければ成功と見做します。
S=success
のようにすると、"success"という文字列が応答に含まれていたら成功と見做すようになるようです。
オプションの書き方を間違えると何もエラーを吐かずに固まったりするようなので注意です。
ちなみに、以下のように-U
オプションでプロトコル(serviceと呼ぶそうです)ごとの細かい使い方が見れますのでご一読ください。
$ hydra -U http-get-form
結構色々オプションがあったりして面白い。http-getの方は何も書いてない。