はじめに
この実験 (lab) では、ターゲットの Web サーバーが Basic HTTP Authentication によって保護されている場合に、人気のディレクトリおよびファイル総当たり攻撃ツールである Gobuster を効果的に使用する方法を学びます。多くの Web アプリケーションや管理インターフェースでは、特定の保護されたリソースへのアクセスを制限するために Basic HTTP Authentication が使用されています。有効な認証情報を提供せずに Gobuster を使用した場合、通常はこれらの保護されたパスを発見できません。この実験では、そのようなターゲットを特定し、Gobuster に必要なユーザー名とパスワードを提供する方法を理解し、保護されたディレクトリやファイルを正常に列挙するプロセスをガイドします。この実験の終わりまでに、Gobuster の認証フラグを使用して基本的なアクセス制限をバイパスし、隠された Web コンテンツを発見するのに熟達しているでしょう。
Basic HTTP 認証で保護されたターゲットの特定
このステップでは、Basic HTTP 認証で保護された Web サーバーのディレクトリを特定します。ローカルの Apache Web サーバーに保護されたディレクトリ/protected_areaを設定しました。認証情報なしでこのディレクトリにアクセスしようとすると、サーバーはユーザー名とパスワードを要求します。
まず、認証情報を提供せずにcurlを使用して保護されたディレクトリにアクセスしてみましょう。これにより、認証チャレンジが実証されます。
ターミナルを開き、次のコマンドを実行します。
curl http://localhost/protected_area/
以下のような出力が表示され、401 UnauthorizedのレスポンスとWWW-Authenticateヘッダーが示されているはずです。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
<hr>
<address>Apache/2.4.52 (Ubuntu) Server at localhost Port 80</address>
</body></html>
この出力は、/protected_areaが Basic HTTP 認証によって保護されていることを確認します。
次に、この保護されたディレクトリ内のファイルsecret.txtにアクセスして、それも保護されていることを確認しましょう。
curl http://localhost/protected_area/secret.txt
同様に401 Unauthorizedのレスポンスを受け取ります。これにより、/protected_area内のすべてのリソースが認証を必要とすることが確認できます。
ユーザー名とパスワードの取得
実際のシナリオでは、Basic HTTP 認証のユーザー名とパスワードを取得するには、ソーシャルエンジニアリング、フィッシング、または総当たり攻撃などのさまざまな技術が関わる可能性があります。この実験の目的のために、保護された領域の認証情報は事前に設定されています。
ユーザー名はlabexuser、パスワードはlabexpasswordです。
これらの認証情報は、-uフラグを使用してcurlで確認できます。このフラグにより、ユーザー名とパスワードを直接指定できます。
正しい認証情報を使用して保護されたディレクトリにアクセスするには、次のコマンドを実行します。
curl -u labexuser:labexpassword http://localhost/protected_area/
これで、成功したレスポンスが表示されるはずです。おそらく、空のディレクトリリストか、存在する場合はデフォルトのインデックスページが表示されます。/protected_areaにはindex.htmlがないため、Indexesが有効になっている場合は403 Forbiddenまたはディレクトリリストが表示される可能性があります。重要なのは、401 Unauthorizedエラーを受け取らなかったことです。
次に、認証情報を使用して、保護されたディレクトリ内のsecret.txtファイルにアクセスしてみましょう。
curl -u labexuser:labexpassword http://localhost/protected_area/secret.txt
これで、secret.txtファイルの内容が表示されるはずです。
This is a secret file.
これにより、提供されたユーザー名とパスワードが正しく、保護されたリソースへのアクセスが許可されていることが確認できます。
ユーザー名に-U フラグを使用する
このステップでは、Gobuster で Basic HTTP 認証のユーザー名を-Uフラグを使用して指定する方法を学びます。このフラグは、ユーザー名は知っているが、パスワードを総当たり攻撃している場合や、認証プロセスの一部としてユーザー名を提供する必要がある場合に重要です。
まず、認証なしで Gobuster スキャンを試みて、保護されたディレクトリに対するその動作を確認しましょう。デモンストレーションのために小さな単語リストを使用します。
~/projectディレクトリにcommon.txtという名前の簡単な単語リストファイルを作成します。
echo -e "admin\nuser\nprotected_area\nsecret.txt" > ~/project/common.txt
次に、この単語リストを使用してhttp://localhostに対して Gobuster を実行しますが、認証は行いません。
gobuster dir -u http://localhost -w ~/project/common.txt
Gobuster は、/protected_areaエントリに対して401 Unauthorizedを報告する可能性が高く、認証情報なしではアクセスできないことを示していることに気づくでしょう。
/protected_area (Status: 401) [Size: 399]
次に、-Uフラグを使用してユーザー名labexuserを指定しましょう。パスワードがまだ必要であることのデモンストレーションのために、ここではパスワードを省略します。
gobuster dir -u http://localhost -w ~/project/common.txt -U labexuser
ユーザー名が指定されていても、パスワードも必要であるため、Gobuster は引き続き401 Unauthorizedのレスポンスを受け取ります。このステップは主に、ユーザー名を提供するための構文を示しています。
/protected_area (Status: 401) [Size: 399]
これは、ユーザー名は受け入れられても、正しいパスワードなしでは認証が失敗することを示しています。
パスワードに-P フラグを使用する
このステップでは、Gobuster で Basic HTTP 認証のパスワードを-Pフラグを使用して指定する方法を学びます。このフラグは、-Uフラグと組み合わせることで、Gobuster が認証されたスキャンを実行できるようになります。
前のステップから引き続き、ユーザー名はlabexuser、パスワードはlabexpasswordであることがわかっています。ここで、-Pフラグを追加してパスワードを指定しましょう。
ユーザー名(-U)とパスワード(-P)の両方のフラグを含めて、次の Gobuster コマンドを実行します。
gobuster dir -u http://localhost -w ~/project/common.txt -U labexuser -P labexpassword
出力を注意深く観察してください。今回は、Gobuster が/protected_areaに遭遇した際に、以前の401 Unauthorizedではなく、正常に認証され、200 OKまたは403 Forbiddenのステータスを報告できるはずです(ディレクトリリストの設定によります)。
/protected_area (Status: 403) [Size: 277]
403 Forbiddenのステータスは、アクセスが許可された(認証成功)が、サーバーがディレクトリリストを禁止するように設定されていることを示しています。これは、以前に見た401 Unauthorizedとは対照的に、認証の成功です。
これにより、ユーザー名とパスワードの両方を提供することで、Gobuster が Basic HTTP 認証に対して正常に認証し、ディレクトリ総当たり攻撃を続行できることが実証されました。
スキャンを実行し、保護されたリソースにアクセスする
この最終ステップでは、保護された領域に対して完全な Gobuster スキャンを実行し、secret.txtファイルを発見できることを確認します。これにより、隠されたリソースを発見するために Gobuster で Basic HTTP 認証を使用する実践的な応用が示されます。
ターゲット URL を変更して、/protected_area内で具体的にスキャンし、secret.txtを含む単語リストを使用します。
まず、common.txt単語リストにsecret.txtが含まれていることを確認しましょう。ステップ 3 で作成した場合、既にそこにあるはずです。
次に、正しいユーザー名とパスワードを使用して、http://localhost/protected_area/をターゲットとする Gobuster を実行します。
gobuster dir -u http://localhost/protected_area/ -w ~/project/common.txt -U labexuser -P labexpassword
スキャンが完了した後、secret.txtが200 OKステータスで見つかったことを示す、以下のような出力が表示されるはずです。
/secret.txt (Status: 200) [Size: 21]
これにより、Gobuster が正常に認証され、保護されたディレクトリ内のsecret.txtファイルを発見したことが確認できます。
これで、認証情報を使用してcurlで発見されたファイルの内容を確認できます。
curl -u labexuser:labexpassword http://localhost/protected_area/secret.txt
以下が表示されるはずです。
This is a secret file.
これで実験は終了です。Gobuster で Basic HTTP 認証を使用して保護された Web リソースを発見する方法を習得しました。
まとめ
この実験では、Basic HTTP 認証で保護された Web サーバー上のディレクトリやファイルを列挙するために Gobuster を使用する実践的な経験を積みました。まず、保護されたターゲットを特定し、401 Unauthorized応答を理解することから始めました。次に、-Uフラグと-Pフラグを使用して、Gobuster に必要なユーザー名とパスワードを提供する方法を学びました。最後に、認証されたスキャンを正常に実行し、保護された領域内のsecret.txtのような隠されたリソースを発見する Gobuster の能力を実証しました。このスキルは、ペネトレーションテスターやセキュリティ専門家が、基本的な認証メカニズムを採用している Web アプリケーションを扱う際に不可欠です。
