はじめに
インターネット全体にWebフォームがあります。通常、通常のユーザーがログインできないサイトでも、おそらく管理領域があります。サイトを実行および展開するときは、機密性の高いコントロールと管理パネルへのアクセスを制限するパスワードが可能な限り安全であることを確認することが重要です。
Webアプリケーションを攻撃する方法はいくつかありますが、このガイドでは、Hydraを使用してログインフォームに対してブルートフォース攻撃を実行する方法について説明します。選択するターゲットプラットフォームはWordPressです。これは、世界で最も人気のあるCMSプラットフォームであり、管理が不十分なことでも有名です。
覚えておいてください このガイドは、WordPressまたは他のWebサイトを保護するのに役立つことを目的としています。所有していない、または書面によるテストの許可を得ていないサイトでの使用は、違法です。 。
セットアップ
何かをする前に、ターゲットにするWordPressWebサイトが必要になります。このガイドでは、WordPressサイトを自分のマシンでホストしていることも前提としています。マシンでのLAMPのセットアップについてサポートが必要な場合は、DebianLAMPおよびUbuntuLAMPガイドを確認してください。
これは、通常のLinuxインストールまたはKaliLinuxインストールのいずれかで実行できます。 Kaliを使用している場合は、ソースガイドのDebianLAMPに従ってください。選択したシステムにHydraとcURLがインストールされていることを確認してください。ほとんどのリポジトリで利用できます。
通常のインストールを本当に使用したくない場合は、間違いなく別のマシンを使用できます。ローカルホストのターゲットのIPをサブインし、攻撃側のマシンからターゲットマシンにアクセスできることを確認してください。
情報の収集
WordPressを起動して実行したら、ターゲットとするインストールについてできるだけ多くの情報を見つけるときが来ました。これは、ログインフォームがどのように作成されているか、フォームを送信するとどうなるか、ログインが成功した場合にどこに移動するかを確認することを意味します。
HTMLソース
ログインページに移動することから始めます。 localhost/wp-login.php
にあります。 。ブラウザの機能を使用して、ソースコードを検査します。ページのどこかを右クリックして、[ソースの表示]または[要素の検査]を選択できます。ソースを表示する方法はどちらでも、さまざまな方法で表示されます。
コードの中央に向かって検索します。あなたはタグを探しています。それが実際のログインフォームです。そのフォームの中には、必要な情報がいくつかあります。
情報を収集する前に、フォームがGETまたはPOSTリクエストを送信するかどうかを確認してください。フォームの最初の行には、次のようなメソッドオプションがあります。method="post"
。 WordPressの場合はPOSTです。
まず、入力されたユーザー名を見つけます。以下の行のようになります。
<input type="text" name="log" id="user_login" class="input" value="" size="20" />
必要な部分はname
です 。この場合、それはlog
。
次に、入力されたパスワードを見つけます。似ているはずです。
<input type="password" name="pwd" id="user_pass" class="input" value="" size="20" />
ここでも、name
を見つけます これはpwd
です 。
また、Hydraがフォームを送信できるように、送信ボタンを識別する必要があります。
<input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="Log In" />
name
の両方をログに記録することが重要です およびvalue
。
最後にもう1つあります。気づいていない場合は、フォームの下部に2つの非表示フィールドがあります。 1つはフォームが送信されたときにリダイレクトするようにWordPressに指示し、もう1つはフォームが送信されたときにWordPressが検索するCookieです。クッキーが必要です。
<input type="hidden" name="testcookie" value="1" />
繰り返しになりますが、name
をメモしてください およびvalue
。
cURL
HTMLソースを調べることで得られる情報はたくさんありますが、Hydraを解き放つ前に知っておく必要のあることがいくつかあります。ただし、ほとんどの場合、収集した情報だけでテストを実行できる可能性があります。間違った資格情報でログインし、エラーメッセージを記録し、そのメッセージをHydraの失敗したテスト条件として使用するだけです。
ただし、WordPressの設計は異なり、ログインに失敗した場合にテストするのに適した方法はありません。このため、ログインが成功したかどうかをテストする必要があります。独自のWordPressのインストールとログインを維持できるためです。クライアントのシステムをテストしている場合、これは違いはありません。ローカルで見つけた条件は、WordPressに共通である必要があります。
ここにも別のしわがあります。フォームの非表示のリダイレクトフィールドを覚えていますか?そのリダイレクトにより、「ダッシュボード」という単語の存在などの条件を使用して成功をテストすることもできなくなります。リクエスト自体を確認する必要があります。そのために、cURLがあります。
比較するには、最初にcURLを含む元のログインページを表示する必要があります。
$ curl -v http://localhost/wp-login.php
情報の大部分は、ブラウザで見たソースコードと同じです。ただし、上部にはHTTPリクエストに関する情報があります。この情報に注意してください。ログインの成功と比較する必要があります。
次に行う必要があるのは、cURLを使用して正常にログインすることです。そのためには、前のリクエストのCookieが必要になります。 HTTPデータを見て、次のような行を見つけます。
< Set-Cookie: wordpress_test_cookie=WP+Cookie+check; path=/
wordpress_test_cookie=WP+Cookie+check
が必要になります 一部。
了解しました。リクエストを行うには、HTMLから収集した情報とそのCookieが必要になります。これがどのように見えるかです。
curl -v --data 'log=username&pwd=realpassword&wp-submit=Log+In&testcookie=1' --cookie 'wordpress_test_cookie=WP+Cookie+check' http://localhost/wp-login.php>
したがって、以前と同じ基本的なリクエストがありますが、今回は--data
を使用しています フラグと--cookie
対話するフォームデータとそのCookieを渡すcURLにフラグを立てて、フォームが実際に送信されるようにします。
そのデータ文字列、log=username&pwd=realpassword&wp-submit=Log+In&testcookie=1
HTMLから収集した情報に直接対応します。値「username」をlog
という入力にプラグインすると言っています pwd
という入力への値「realpassword」 。ログインには、必ず実際のユーザー名とパスワードを使用してください。次に、wp-submit
という名前の送信を使用します。 およびLog In
の値 データを送信します。最後にtestcookie
があります 値が1
。これは、cURLに残りのフォームデータと一緒に送信するように指示しているだけです。
cURLがリクエストを完了すると、実際にはHTMLは表示されず、リクエスト情報がたくさん表示されます。 「ダッシュボード」を使用したテストをテスト条件として機能させなかったリダイレクトを覚えていますか?さて、リダイレクト自体がテスト条件になります。下の行を見てください。
< Location: http://localhost/wp-admin/
その行は前のリクエストにはありませんでした。また、そのユーザーまたはログインに関連する特定の情報は含まれていません。つまり、常に WordPressのログインが成功している間は存在しているため、テストに最適な条件になります。
Hydraを使用したテスト
最後に、Hydraでパスワードをテストするために必要なものがすべて揃っています。このガイドのポイントは、Hydra構文をカバーすることではありませんが、使用されるコマンドを分解します。 Hydraについて詳しく知りたい場合は、詳細が記載されているSSHガイドを確認してください。
HydraがWordPressサイトのセキュリティをテストするために可能なユーザー名とパスワードを実行するために必要なコマンドは、実際には1つだけです。最も簡単な方法は、コマンドを確認して分解することです。
$ hydra -L lists/usrname.txt -P lists/pass.txt localhost -V http-form-post '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log In&testcookie=1:S=Location'
さて、これは明らかに一度に取り入れるべきことがたくさんあります。 -L
フラグは、Hydraにlists/usrname.txt
にあるユーザー名のワードリストを使用するように指示します 。同様に、-P
フラグは、Hydraにlists/pass.txt
にあるパスワードのワードリストを使用するように指示します。 。 localhost
Hydraにローカルホストをターゲットにするように指示し、-V
すべてのテストをコンソール出力に記録するように指示します。
コマンドの残りの部分は、HTTPリクエスト自体を処理します。 http-form-post
POSTメソッドでHTTPフォームを処理するためにHydraモジュールをアクティブ化します。以前から、WordPressログインフォームはからのPOSTに直面していることを覚えておいてください。次の文字列には、Hydraが使用するすべてのパラメータが含まれています。これは、cURLを介してログインするために使用されるものと非常に似ていることに注意してください。
文字列は、:
で区切られたさまざまなセクションで構成されます 。最初の部分は、テストされている正確なアドレス/wp-login.php
です。 。次の部分は、cURLで使用される部分とほぼ同じです。フォームに値を渡し、Cookieを含めて送信します。リテラル値を渡す代わりに、Hydraは実際には変数を使用しています。 log=^USER^
に注意してください およびpwd=^PASS^
。これらは、ニンジン文字で区切られた変数であり、ワードリストから値を取得し、Hydraが実行する各テストのリクエストでそれらを渡します。
文字列の最後の部分はテスト条件です。 S
成功をテストしていることを意味します。失敗をテストする場合は、F
を使用します 。テスト対象の単語またはフレーズと同じに設定します。 grep
のようだと思います 。
これを実行すると、Hydraに提供したワードリストに正しいユーザー名とパスワードが含まれていれば、肯定的な結果が得られるはずです。
まとめ
まず、すべてを完了したことをおめでとうございます。完了したら、WordPressユーザーアカウントのパスワード強度をテストするための確実な方法が得られます。
このガイドはWordPress向けに作成されていますが、同じ手順で他のWebフォームを簡単にテストできます。複数のユーザーでWebアプリケーションを実行する場合は、ユーザーが強力なパスワードを使用していることを
確認することをお勧めします。これは、パスワードポリシーを通知するのに役立ちます。繰り返しになりますが、常に許可を得てのみテストしていることを確認してください。