Web 認証のブルートフォース攻撃

HydraBeginner
オンラインで実践に進む

はじめに

この実験では、攻撃者が脆弱な Web 認証システムをどのように侵害するかを学びます。標準的な HTTP POST ログインリクエストを分析し、Hydraブルートフォースツールを設定して、Web ポータルのログインフォームに対して自動化された辞書攻撃を実行し、有効な認証情報を復元する方法を習得します。

ブルートフォース攻撃(総当たり攻撃)とは、パスワードやパスフレーズを体系的に試行し、最終的に正解を推測しようとする手法です。Web アプリケーションを標的にする場合、攻撃者はユーザーの認証情報を送信するために HTTP POST メソッドを使用するログインフォームを狙うことがよくあります。これらの攻撃がどのように機能するかを理解することは、Web アプリケーションを保護し、適切なレート制限やアカウントロックアウトのメカニズムを実装するために不可欠です。

これは根本的に「認証の経済性」の問題です。アプリケーションが攻撃者に低コストで何度も推測を許してしまうと、脆弱なパスワードや使い回された認証情報が突破される可能性が高まります。

ログインリクエストパラメータの分析

このステップでは、ターゲットとなる Web アプリケーションがどのようにログインリクエストを処理しているかを理解するために分析を行います。ブルートフォース攻撃を開始する前に、ターゲットの URL、使用されている HTTP メソッド、入力フィールドの名前、およびログイン失敗時に返されるメッセージを特定する必要があります。

この偵察ステップは非常に重要です。なぜなら、Hydra のようなツールは、ユーザーが提供するリクエストテンプレートの精度に依存するからです。フォームの構造を誤解していれば、攻撃のロジックは最初から失敗してしまいます。

ローカル Web サーバーがポート 8080 で起動しています。まず、ログインページの HTML ソースコードを表示して、フォームのパラメータを確認しましょう。curl コマンドを使用して Web ページの内容を取得できます。

curl -s http://127.0.0.1:8080/

出力にはシンプルな HTML フォームが表示されます。action="/login" 属性に注目してください。これはフォームデータがどこに送信されるかを示しています。method="POST" 属性は、データが HTTP POST リクエストを使用して送信されることを示しています。最後に、入力フィールドの name 属性である username と password を確認してください。

次に、サーバーがどのように応答するかを確認するために、ログイン失敗をシミュレートする必要があります。ブルートフォースツールは「失敗」がどのようなものかを認識し、失敗メッセージが表示されない場合に「成功」を特定する必要があるため、これは重要なステップです。

curl を使用して、ダミーの認証情報で POST リクエストを送信します。-X POST フラグは HTTP メソッドを指定し、-d フラグはフォームデータを送信するために使用します。

curl -X POST -d "username=testuser&password=wrongpass" http://127.0.0.1:8080/login

以下のような出力が表示されるはずです。

Invalid credentials. Please try again.

この特定の文字列 Invalid credentials が失敗メッセージです。後ほど、このフレーズを使用してブルートフォースツールを設定します。

ターゲットワードリストの選択

このステップでは、ブルートフォース攻撃に使用する辞書(ワードリスト)を準備します。辞書攻撃は、あらかじめ定義されたユーザー名とパスワードのリストに依存します。

辞書攻撃は、人間の予測可能性を悪用するため、盲目的な総当たり検索よりも高速です。人間はランダムにパスワードを選択するわけではありません。

攻撃者は、考えられるすべての文字の組み合わせを試す代わりに、一般的なユーザー名(admin, root, user など)や頻繁に使用されるパスワード(123456, password, qwerty など)を含むワードリストを使用します。

現在の作業ディレクトリ(~/project)に 2 つのシンプルなテキストファイルを作成します。最初のファイルには、考えられるユーザー名のリストを格納します。echo コマンドを使用して、users.txt というファイルに名前を書き込みます。

echo "root" > users.txt
echo "admin" >> users.txt
echo "test" >> users.txt

> 演算子はファイルを作成して最初の行を書き込み、>> 演算子は既存のファイルに後続の行を追加します。

次に、考えられるパスワードのリストを含む passwords.txt というファイルを作成します。

echo "password123" > passwords.txt
echo "admin123" >> passwords.txt
echo "secret123" >> passwords.txt
echo "123456" >> passwords.txt

cat コマンドを使用して、作成したワードリストの内容を確認できます。

cat users.txt
cat passwords.txt

現実のシナリオでは、ペネトレーションテスターは rockyou.txt のような、数百万件の漏洩パスワードを含む大規模で公開されているワードリストを使用します。この学習用ラボでは、これらの小さなカスタムワードリストで十分です。

HTTP POST フォーム用の Hydra 設定

このステップでは、強力なネットワークログインクラッカーである Hydra のコマンド構成方法を学びます。Hydra は HTTP、FTP、SSH など、多数のプロトコルをサポートしています。

Web ログインフォームを攻撃するために、Hydra は http-post-form という特定のモジュールを使用します。このモジュールは、ターゲットの Web アプリケーションとどのように対話するかを理解するために、慎重にフォーマットされた文字列を必要とします。

http-post-form モジュールの構文は次のようになります: "<path>:<form parameters>:<failure string>"

ステップ 1 で収集した情報にこれをどのように適用するかを分解してみましょう。まずパスは、フォームが送信される URL であり、今回は /login です。次にフォームパラメータは、POST リクエストで送信されるデータを表します。フィールドは username と password であることがわかりました。Hydra はワードリストから単語を注入するために ^USER^ と ^PASS^ という特別なプレースホルダーを使用するため、パラメータ文字列は username=^USER^&password=^PASS^ となります。最後に、失敗文字列はログイン失敗時にページに表示されるテキストであり、Invalid credentials と特定しました。

これら 3 つの部分をコロンでつなぐと、モジュール設定文字列は次のようになります: "/login:username=^USER^&password=^PASS^:Invalid credentials"

実際の攻撃を実行する前に、http-post-form モジュールの組み込みヘルプドキュメントを確認して、その機能をより深く理解することができます。次のコマンドを実行して、モジュール固有のヘルプを表示してください。

hydra -U http-post-form

このコマンドは、モジュール文字列のフォーマット方法に関する詳細な手順と例を出力します。これは、将来より複雑なログインフォームに遭遇した際に非常に役立つリファレンスとなります。

ブルートフォース攻撃の実行

このステップでは、これまでに学んだすべてを組み合わせて、ローカル Web サーバーに対して自動化された辞書攻撃を実行します。

hydra コマンドをいくつかのフラグと共に使用します。

  • -L users.txt: ユーザー名のリストを含むファイルを指定します。
  • -P passwords.txt: パスワードのリストを含むファイルを指定します。
  • -s 8080: ターゲットポートを指定します。
  • 127.0.0.1: ターゲットサーバーの IP アドレスです。
  • http-post-form: 使用するプロトコルモジュールです。
  • "/login:username=^USER^&password=^PASS^:Invalid credentials": 前のステップで作成したモジュール設定文字列です。

ターミナルで次のコマンドを実行して、ブルートフォース攻撃を開始します。

hydra -L users.txt -P passwords.txt -s 8080 127.0.0.1 http-post-form "/login:username=^USER^&password=^PASS^:Invalid credentials"

Hydra はワードリストからユーザー名とパスワードのあらゆる組み合わせをテストし始めます。ワードリストが小さく、サーバーがローカルにあるため、攻撃は非常に短時間で終了します。

以下のような出力が表示されるはずです。

Hydra v9.2 (c) 2021 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2026-10-25 10:00:00
[DATA] max 12 tasks per 1 server, overall 12 tasks, 12 login tries (l:3/p:4), ~1 tries per task
[DATA] attacking http-post-form://127.0.0.1:8080/login:username=^USER^&password=^PASS^:Invalid credentials
[8080][http-post-form] host: 127.0.0.1   login: admin   password: secret123
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2026-10-25 10:00:01

緑色で強調表示されている(または成功が明示されている)行に注目してください: [8080][http-post-form] host: 127.0.0.1 login: admin password: secret123。Hydra は、ユーザー名 admin とパスワード secret123 の組み合わせが「Invalid credentials」という文字列を返さなかったことを正常に特定しました。つまり、ログインが成功したことを意味します。

まとめ

この実験では、脆弱な Web 認証システムを分析し、攻撃する方法を習得しました。まず、HTTP POST ログインフォームを調査して、ターゲットパス、入力パラメータ、および失敗メッセージを特定しました。次に、辞書攻撃用のカスタムワードリストを作成しました。最後に、Hydra ブルートフォースツールを設定・実行してログイン試行を自動化し、有効な認証情報を復元することに成功しました。

これらの手法を理解することは、自動化されたブルートフォース攻撃から Web アプリケーションを保護するために、アカウントロックアウト、CAPTCHA、多要素認証(MFA)などの強力なセキュリティ対策を実装することの重要性を浮き彫りにします。