コロン区切りの資格情報を使った攻撃

HydraHydraBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Hydra を使用して資格情報ベースの攻撃を行う方法を学びます。この実験では、ユーザー名とパスワードの組み合わせがコロンで区切られた資格情報ファイルを利用して、ターゲットサービスのログイン資格情報をクラックすることに焦点を当てています。

まず、nano のようなテキストエディタを使用して、ユーザー名:パスワードのペアが記載された credentials.txt ファイルを作成します。次に、-C オプションを使用してこのファイルを Hydra に読み込む方法を学び、Hydra がターゲットに対して複数のログイン組み合わせを効率的に試行できるようにします。最後に、出力が攻撃で使用された資格情報と一致することを確認します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hydra(("Hydra")) -.-> hydra/HydraGroup(["Hydra"]) hydra/HydraGroup -.-> hydra/basic_structure("Basic Command Structure") hydra/HydraGroup -.-> hydra/single_username("Single Username Attack") hydra/HydraGroup -.-> hydra/single_password("Single Password Attack") hydra/HydraGroup -.-> hydra/target_ip("Target IP Specification") hydra/HydraGroup -.-> hydra/target_service("Target Service Selection") hydra/HydraGroup -.-> hydra/http_form("HTTP Form Attack") hydra/HydraGroup -.-> hydra/success_detection("Login Success Detection") subgraph Lab Skills hydra/basic_structure -.-> lab-550763{{"コロン区切りの資格情報を使った攻撃"}} hydra/single_username -.-> lab-550763{{"コロン区切りの資格情報を使った攻撃"}} hydra/single_password -.-> lab-550763{{"コロン区切りの資格情報を使った攻撃"}} hydra/target_ip -.-> lab-550763{{"コロン区切りの資格情報を使った攻撃"}} hydra/target_service -.-> lab-550763{{"コロン区切りの資格情報を使った攻撃"}} hydra/http_form -.-> lab-550763{{"コロン区切りの資格情報を使った攻撃"}} hydra/success_detection -.-> lab-550763{{"コロン区切りの資格情報を使った攻撃"}} end

ログイン名:パスワードの資格情報ファイルを作成する

このステップでは、ユーザー名とパスワードが記載されたファイルを作成します。各行には 1 つの組み合わせが記載され、コロンで区切られます。このファイルは、後で Hydra を使用してターゲットサービスのログイン資格情報をクラックする際に使用されます。

まず、資格情報ファイルに必要な形式を理解しましょう。各行にはユーザー名、コロン (:)、および対応するパスワードが含まれている必要があります。例えば:

username1:password1
username2:password2

では、ファイルを作成しましょう。簡単で使いやすい nano テキストエディタを使用します。

  1. nano を使用して、~/project ディレクトリに credentials.txt という名前の新しいファイルを開きます。

    nano ~/project/credentials.txt
  2. nano エディタで、以下のユーザー名/パスワードの組み合わせを追加します。これらを変更したり、独自の組み合わせを追加しても構いません。

    admin:password
    user1:123456
    test:test
    root:toor
  3. ファイルを保存するには、Ctrl+O (書き出し) を押します。Nano はファイル名を入力するように促します。デフォルトのファイル名 (~/project/credentials.txt) を受け入れるには、Enter を押します。

  4. nano を終了するには、Ctrl+X を押します。

では、ファイルが作成され、正しい内容が含まれていることを確認しましょう。

  1. cat コマンドを使用して、credentials.txt ファイルの内容を表示します。

    cat ~/project/credentials.txt

    先ほど入力したユーザー名/パスワードの組み合わせが表示されるはずです。

    admin:password
    user1:123456
    test:test
    root:toor

これで、Hydra で使用できる資格情報ファイルを正常に作成しました。このファイルには、Hydra がターゲットサービスに対して試行する潜在的なユーザー名とパスワードのリストが含まれています。

-C オプションで資格情報を読み込む

このステップでは、Hydra の -C オプションを使用して、ユーザー名とパスワードの組み合わせが記載された資格情報ファイルを指定する方法を学びます。これは、ユーザー名とパスワードを個別に指定する場合と比較して、Hydra に複数のログイン試行を提供するより効率的な方法です。

-C オプションは、Hydra にユーザー名とパスワードの組み合わせをファイルから直接読み取るよう指示します。ファイルは、前のステップで作成したように、各行に username:password の形式で記載する必要があります。

-C オプションを使用した基本的な Hydra コマンドをシミュレートしてみましょう。このステップでは実際にサービスを攻撃することはしませんが、オプションの使用方法を理解するためにコマンドを構築します。

127.0.0.1 で実行されている HTTP サービスを攻撃したいとします。作成した資格情報ファイルを使用する基本的な Hydra コマンドは、次のようになります。

hydra -C ~/project/credentials.txt 127.0.0.1 http-get /

このコマンドを分解してみましょう。

  • hydra: これは Hydra ツールを実行するコマンドです。
  • -C ~/project/credentials.txt: このオプションは、前のステップで作成した資格情報ファイルのパスを指定します。Hydra はこのファイルからユーザー名とパスワードの組み合わせを読み取ります。
  • 127.0.0.1: これはターゲットの IP アドレスです。この例では、ローカルマシンです。
  • http-get /: これは攻撃するサービス (HTTP) と要求するパス (/) を指定します。これはプレースホルダーであり、次のステップで使用されます。

重要な注意: このコマンドは、このステップでは実際に成功した攻撃を行いません。-C オプションの使用方法を示しているだけです。実際の攻撃を行うには、脆弱な HTTP サービスが実行されている必要があり、これは次のステップで説明します。

-C オプションの使用方法を理解していることを確認するために、コマンド履歴を確認しましょう。

資格情報ファイルを使用して HTTP を攻撃する

このステップでは、先ほど作成した資格情報ファイルを使用して、Hydra を使って模擬 HTTP サービスを攻撃します。このステップを実行するために、まず認証が必要なシンプルな HTTP サーバーをセットアップします。このサーバーは、意図的にブルートフォース攻撃に対して脆弱になっています。

  1. 基本認証付きのシンプルな HTTP サーバーを作成する:

    Python の組み込み http.server モジュールを使用して、認証が必要な基本的な HTTP サーバーを作成します。まず、~/project ディレクトリに webserver.py という名前のファイルを作成します。

    nano ~/project/webserver.py

    以下の Python コードをファイルに貼り付けます。

    import http.server
    import socketserver
    import base64
    
    PORT = 8000
    
    class AuthHandler(http.server.SimpleHTTPRequestHandler):
        def do_HEAD(self):
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
    
        def do_AUTHHEAD(self):
            self.send_response(401)
            self.send_header('WWW-Authenticate', 'Basic realm="My Realm"')
            self.send_header('Content-type', 'text/html')
            self.end_headers()
    
        def do_GET(self):
            auth = self.headers.get('Authorization')
            if auth == None:
                self.do_AUTHHEAD()
                self.wfile.write(b"Authentication Required")
            elif auth == 'Basic YWRtaW46cGFzc3dvcmQ=': ## admin:password base64 encoded
                http.server.SimpleHTTPRequestHandler.do_GET(self)
            else:
                self.do_AUTHHEAD()
                self.wfile.write(b"Authentication Failed")
    
    Handler = AuthHandler
    
    with socketserver.TCPServer(("", PORT), Handler) as httpd:
        print("serving at port", PORT)
        httpd.serve_forever()

    このスクリプトは、基本認証が必要なシンプルな HTTP サーバーを作成します。正しいユーザー名は admin、パスワードは password です。Base64 エンコードされた文字列 YWRtaW46cGFzc3dvcmQ=admin:password を表しています。

    ファイルを保存し (Ctrl+O を押し、次に Enter を押す)、nano を終了します (Ctrl+X を押す)。

  2. HTTP サーバーを起動する:

    Python スクリプトを実行して、HTTP サーバーを起動します。

    python3 ~/project/webserver.py

    サーバーが起動し、ポート 8000 で待機します。Hydra 攻撃を行うためにサーバーを実行し続ける必要があるため、このターミナルウィンドウを開いたままにしておきます。

  3. Hydra を使用して HTTP サービスを攻撃する:

    新しいターミナルウィンドウを開きます。次に、最初のステップで作成した資格情報ファイルを使用して、Hydra を使って HTTP サービスを攻撃します。

    hydra -C ~/project/credentials.txt 127.0.0.1 http-get /

    Hydra は、credentials.txt ファイル内の各ユーザー名/パスワードの組み合わせを HTTP サービスに対して試行します。ルートパス / にアクセスしようとします。

    Hydra が異なるユーザー名/パスワードの組み合わせを試行していることを示す出力が表示されるはずです。Hydra が正しい資格情報 (admin:password) を見つけることに成功すると、出力にそれらが表示されます。

    成功した攻撃の出力例:

    Hydra v9.1 (c) 2020 by van Hauser/THC - Use freely but carefully.
    ...
    [http-get] 1 of 1 target
    [http-get] Trying login: admin/password
    ...
    [http-get] host: 127.0.0.1   login: admin   password: password
    ...
    1 target completed, 1 valid password found

    攻撃が成功すると、Hydra は正しいユーザー名とパスワードを表示します。

  4. HTTP サーバーを停止する:

    webserver.py スクリプトが実行されているターミナルウィンドウで、Ctrl+C を押してサーバーを停止します。

これで、資格情報ファイルを使用して Hydra を使って HTTP サービスを攻撃することに成功しました。

出力が資格情報と一致することを確認する

このステップでは、前のステップの攻撃中に Hydra が見つけた資格情報が、credentials.txt ファイルと webserver.py スクリプトに含まれる期待される資格情報と一致することを確認します。これにより、Hydra が有効なログイン組み合わせを正しく識別していることが保証されます。

前のステップでは、Hydra が次のような出力を表示していたはずです。

[http-get] host: 127.0.0.1   login: admin   password: password

この出力は、Hydra がユーザー名 admin とパスワード password を正常に見つけたことを示しています。

では、これらの資格情報が credentials.txt ファイルと webserver.py スクリプトの両方に含まれていることを確認しましょう。

  1. credentials.txt 内の資格情報を確認する:

    cat コマンドを使用して、credentials.txt ファイルの内容を表示します。

    cat ~/project/credentials.txt

    ファイルに admin:password という行が含まれていることを確認してください。

  2. webserver.py 内の資格情報を確認する:

    cat コマンドを使用して、webserver.py ファイルの内容を表示します。

    cat ~/project/webserver.py

    ファイルに elif auth == 'Basic YWRtaW46cGFzc3dvcmQ=': ## admin:password base64 encoded という行が含まれていることを確認してください。この行は、サーバーがユーザー名 admin とパスワード password (Base64 エンコードされたもの) を期待していることを確認します。

Hydra が見つけた資格情報が credentials.txt ファイルと webserver.py スクリプトの両方の資格情報と一致することを確認することで、Hydra が正しく動作して有効なログイン組み合わせを識別していることを確信できます。

まとめ

この実験では、コロンで区切られたユーザー名とパスワードの組み合わせを含む credentials.txt という名前の資格情報ファイルを作成する方法を学びました。各組み合わせは新しい行に記載されています。このファイルは ~/project ディレクトリに保存され、Hydra で使用するために準備されます。

この実験ではまた、Hydra で -C オプションを使用してこれらの資格情報を読み込み、より効率的にログイン試行を行うという基本的な概念も紹介しました。ただし、このオプションの完全な実装については、提供された抜粋では詳細に説明されていません。