はじめに
この実験(Lab)では、Hydra で利用可能な HTTP POST オプションを探求し、HTTP POST を認証に使用するサービスを効果的にターゲットにする方法に焦点を当てます。ユーザー名とパスワードの指定方法、および POST リクエストを送信する URL について学びます。
この実験では、HTTP POST オプションの確認、HTTP POST フォームの設定、特定のオプションを使用した Hydra の実行、および POST 攻撃の検証について説明します。HTTP POST を認証に使用するサービスをターゲットにする際に、Hydra を使用してログイン認証情報をブルートフォースする方法を学びます。
HTTP POST オプションの確認
このステップでは、Hydra で利用可能な HTTP POST オプションを探求します。Hydra は、ログイン認証情報をブルートフォースするための強力なツールであり、HTTP POST を含むさまざまなプロトコルをサポートしています。HTTP POST を認証に使用する Web アプリケーションをターゲットにする場合、ログインフォームに関する特定の情報を Hydra に提供する必要があります。
Hydra を HTTP POST で使用するための基本的な構文は次のとおりです。
hydra -l <username> -P <password_list> <target_ip> http-post-form "<url>:<post_data>:<failure_string>"
主要なコンポーネントを分解してみましょう。
hydra: Hydra を呼び出すためのコマンド。-l <username>: 攻撃に使用する単一のユーザー名を指定します。ユーザー名のリストがある場合は、代わりに-L <username_list>オプションを使用できます。-P <password_list>: 試行するパスワードのリストを含むファイルへのパスを指定します。<target_ip>: ターゲットサーバーの IP アドレス。http-post-form: HTTP POST フォームモジュールを使用していることを指定します。このモジュールは、POST メソッドを使用する Web フォームを攻撃するように設計されています。"<url>:<post_data>:<failure_string>": これは、Hydra がログインフォームとどのように対話するかを Hydra に指示する重要な部分です。<url>: POST リクエストを処理するログインスクリプトまたはページへのパス (例:/login.php)。<post_data>: POST リクエストの本文で送信されるデータ。これには通常、HTML フォームのユーザー名とパスワードフィールドの名前と、Hydra が入力するユーザー名とパスワードのプレースホルダーが含まれます。プレースホルダーは通常、ユーザー名には^USER^、パスワードには^PASS^が使用されます (例:username=^USER^&password=^PASS^)。<failure_string>: ログイン試行が失敗した場合の応答に表示される文字列。Hydra は、この文字列を使用して、ログイン試行が失敗したかどうかを判断します。不正な資格情報で手動でログインを試み、応答を観察することにより、この文字列を特定する必要があります。
次のステップでは、単純な HTTP POST フォームを設定し、これらのオプションを適用して Hydra を使用して攻撃します。
HTTP POST フォームの設定
このステップでは、Hydra 攻撃のターゲットとして使用できるシンプルな HTTP POST フォームを設定します。セットアップフェーズ中に、必要なファイル (login.html と login.php) を ~/project ディレクトリに既に作成しています。
これらのファイルの内容を調べて、フォームの構造と、PHP スクリプトがログイン試行をどのように処理するかを理解しましょう。
まず、login.html を見てみましょう。
cat ~/project/login.html
<!doctype html>
<html>
<head>
<title>Login Form</title>
</head>
<body>
<h1>Login</h1>
<form method="post" action="login.php">
<label for="username">Username:</label><br />
<input type="text" id="username" name="username" /><br /><br />
<label for="password">Password:</label><br />
<input type="password" id="password" name="password" /><br /><br />
<input type="submit" value="Login" />
</form>
</body>
</html>
この HTML コードは、POST メソッドを使用し、login.php にデータを送信するフォームを定義しています。入力フィールドの名前は username と password です。これは、POST データに username=<value> と password=<value> が含まれる必要があることを示しています。
次に、login.php を見てみましょう。
cat ~/project/login.php
<?php
$username = $_POST['username'];
$password = $_POST['password'];
if ($username == 'testuser' && $password == 'password') {
echo "Login successful!";
} else {
echo "Invalid username or password";
}
?>
この PHP スクリプトは、送信された username が testuser で、password が password であるかどうかを確認します。一致する場合は、「Login successful!」と出力します。それ以外の場合は、「Invalid username or password」と出力します。
このスクリプトから、失敗文字列「Invalid username or password」を特定できます。これは、Hydra がログイン試行が失敗したかどうかを判断するために応答で探す文字列です。

これで、フォームの構造と失敗メッセージを理解できたので、次のステップで Hydra コマンドを作成するために必要なすべての情報が揃いました。
Web サービスのステータス確認
次のステップに進む前に、PHP Web サービスが実行されていてアクセス可能であることを確認してください。ターミナルで次のコマンドを実行します。
curl -s http://0.0.0.0:8080/login.php
ページの内容 (「Invalid username or password」など) が表示される場合、サービスは正常に実行されています。

応答がない場合、または接続エラーが発生した場合は、次のコマンドで PHP 組み込み Web サーバーを手動で起動できます。
nohup php -S 0.0.0.0:8080 -t /home/labex/project > /dev/null 2>&1 &
しばらく待ってから、curl コマンドをもう一度試してください。
HTTP POST で Hydra を実行
これで、ターゲットの HTTP POST フォームが設定され、その構造を理解できたので、Hydra を使用してログイン認証情報のブルートフォースを試みることができます。前のステップで収集した情報を使用して、Hydra コマンドを構築します。
次のことがわかっています。
- ターゲット URL は
/login.phpです。 - POST データは
username=^USER^&password=^PASS^の形式である必要があります。 - 失敗文字列は「Invalid username or password」です。
- ユーザー名
testuserとパスワードリスト~/project/password.txtを使用します。 - ターゲット IP アドレスは
0.0.0.0です (Web サーバーがローカルで実行されていると仮定)。
これをまとめて Hydra コマンドを作成します。
hydra -l testuser -P ~/project/password.txt 0.0.0.0 -s 8080 http-post-form "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password"
ターミナルでこのコマンドを実行します。

Hydra は、指定されたユーザー名とリストからのパスワードを使用して、ターゲットフォームへのログインを試行し始めます。ユーザー名と各パスワードを含む POST データを使用して、HTTP POST リクエストを http://0.0.0.0:8080/login.php に送信します。応答に失敗文字列「Invalid username or password」が含まれていない場合、Hydra はログイン試行が成功したとみなし、認証情報を報告します。
出力には、攻撃の進行状況が表示されます。正しいパスワード (password) が password.txt ファイルに含まれているため、Hydra は最終的にそれを見つけるはずです。
Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-22 09:55:07
[DATA] max 3 tasks per 1 server, overall 3 tasks, 3 login tries (l:1/p:3), ~1 try per task
[DATA] attacking http-post-form://0.0.0.0:8080/login.php:username=^USER^&password=^PASS^:F=Invalid username or password
[8080][http-post-form] host: 0.0.0.0 login: testuser password: password
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-22 09:55:08
行 [http-post] host: 0.0.0.0 login: testuser password: password は、Hydra が正しい認証情報を正常に見つけたことを示しています。
POST 攻撃の検証
このステップでは、Hydra が testuser アカウントの正しいパスワードを正常に特定したことを、次の 2 つの方法で検証します。
- まず、Hydra の出力を確認します。
[8080][http-post-form] host: 0.0.0.0 login: testuser password: password
この行は、Hydra が有効な認証情報、つまりユーザー名 testuser とパスワード password を見つけたことを示しています。
- 次に、Web インターフェースでこれらの認証情報を手動で検証します。
LabEx 環境でログインフォームにアクセスするには、次の手順に従います。
- 上部のメニューバーにある「Web 8080」タブをクリックします。
- アドレスバーで、現在の URL の末尾に
/login.htmlを追加します。 - Hydra が発見した認証情報を入力します。
- ユーザー名:
testuser - パスワード:
password
- ユーザー名:
- 「Login」ボタンをクリックします。

フォームを送信した後、「Login successful!」が表示された場合は、Hydra が見つけた認証情報が実際に正しいことを確認できます。
成功メッセージが表示されない場合は、前の手順を確認して、以下を確実にしてください。
~/projectのpassword.txtファイルにパスワードpasswordが含まれていること~/projectのlogin.phpファイルが、ユーザー名testuserとパスワードpasswordを正しくチェックし、適切なメッセージを返していること- Web サーバーがまだ実行されていること (必要に応じて、
php -S 0.0.0.0:8080 -t /home/labex/projectで再起動できます)
このステップを正常に完了し、Hydra の出力と手動テストの両方で認証情報を検証することにより、Hydra を使用して有効なログイン認証情報を発見し、その信頼性を確認する能力を実証しました。
まとめ
この実験では、Hydra を使用して、認証に HTTP POST を使用する Web アプリケーションを攻撃する方法を検討しました。 http-post-form モジュールに必要な主要なオプションについて学びました。これには、ターゲット URL の指定、ユーザー名とパスワードのプレースホルダー (^USER^ および ^PASS^) を使用した POST データの形式、およびログイン試行の失敗を検出するための応答内の失敗文字列の識別が含まれます。
シンプルな HTML フォームと PHP スクリプトを設定して、ログインページをシミュレートしました。これにより、POST リクエストの構造と期待される応答を理解することができました。適切な Hydra コマンドを作成して実行することにより、ログイン認証情報をブルートフォースで正常に攻撃し、HTTP POST フォームを攻撃する Hydra の能力を実証しました。
以下の方法を学習しました。
- HTTP POST で Hydra を使用するための基本的な構文を理解する。
- Web フォームから必要な情報を特定する (URL、フィールド名、失敗メッセージ)。
- HTTP POST フォームをターゲットとする Hydra コマンドを構築する。
- 成功したログイン攻撃を検証するために Hydra の出力を解釈する。
この実験は、Web アプリケーションのセキュリティテストで一般的なシナリオである、HTTP POST 攻撃に Hydra を使用するための基本的な理解を提供します。


