はじめに
Web アプリケーションのセキュリティにおいて、隠しファイルやディレクトリを発見することは、偵察フェーズにおける重要なステップです。多くのアプリケーションでは、機密性の高い設定情報、バージョン管理システム、または環境変数を、ドットで始まるプレフィックス(例:.env, .git, .htaccess)を持つファイルに保存しています。これらのファイルは、ファイルブラウザや Web サーバーではデフォルトで隠されていることが多く、それほど明白なターゲットではありません。しかし、設定ミスがあると、Web サーバーから直接アクセス可能になり、深刻な情報漏洩脆弱性につながる可能性があります。
Gobuster は、これらの隠しアセットを発見するために使用できる強力なディレクトリおよびファイル総当たり(brute-forcing)ツールです。一般的なドットプレフィックス付きのファイル名を含むターゲットを絞った単語リスト(wordlist)を提供することで、見逃される可能性のある貴重な情報を見つけるチャンスを大幅に増やすことができます。
この実験(Lab)では、Gobuster を使用してこれらの隠しドットプレフィックス付きファイルを特定し、発見するプロセスをガイドします。適切な単語リストの準備、Gobuster スキャンの実行、そして潜在的なセキュリティリスクを特定するための結果の解釈方法を学びます。
ドットプレフィックス付きファイル(例:.env, .git)の重要性を理解する
このステップでは、Web セキュリティの文脈においてドットプレフィックス付きファイルがなぜ重要なのかを理解します。.env、.git、.htaccess、.bashrc、または.sshのようなファイルは、Linux および Web 開発環境で、設定、バージョン管理データ、または機密性の高い認証情報(credentials)を保存するためによく使用されます。
.envファイル: これらのファイルは環境変数を格納しており、多くの場合、データベース認証情報、API キー、その他の機密性の高いアプリケーション設定が含まれています。これらが公開されると、攻撃者はバックエンドシステムへの完全なアクセス権を得ることができます。.gitディレクトリ: Web サーバー上で.gitディレクトリが公開されている場合、攻撃者はリポジトリのコミット履歴、かつてリポジトリの一部であった機密ファイル、および内部コメントを含むソースコードリポジトリ全体をダウンロードできる可能性があります。.htaccessファイル: Apache Web サーバーで使用され、認証、認可、URL リライトを含むディレクトリレベルの設定を構成します。設定ミスや公開は、バイパスや情報漏洩につながる可能性があります。
これらのファイルは通常、ファイルエクスプローラーではデフォルトで隠されており、Web サーバー経由でのアクセスが意図的に制限されていることが多いですが、設定ミスによって意図せず公開される可能性があります。偵察中にこれらを発見することは、ターゲットアプリケーションのインフラストラクチャと潜在的な脆弱性に関する重要な洞察を提供することができます。
この実験(Lab)のために、バックグラウンドで簡単な Web サーバーをセットアップし、/tmp/web_rootからコンテンツを提供しています。このディレクトリには、隠し.envファイルと.hidden_configファイルが含まれており、これらを発見しようと試みます。
ドットプレフィックス付きファイルを含む単語リスト(wordlist)を作成または検索する
このステップでは、ドットプレフィックス付きファイルを見つけるために特別に設計された単語リスト(wordlist)を準備します。SecLists のような一般的な単語リストは多数存在しますが、この特定のタスクにはターゲットを絞ったリストを作成する方が効率的です。
~/projectディレクトリにdotfiles.txtという名前のシンプルな単語リストを作成します。この単語リストには、Gobuster にチェックさせたい一般的なドットプレフィックス付きファイル名が含まれます。
まず、プロジェクトディレクトリに移動します。
cd ~/project
次に、nanoを使用してdotfiles.txtファイルを作成し、いくつかの一般的なドットプレフィックス付きファイル名を追加します。
nano dotfiles.txt
nano内で、以下の行を追加します。
.env
.git
.htaccess
.bashrc
.profile
.ssh
.hidden_config
ファイルを保存するにはCtrl+Sを押し、nanoを終了するにはCtrl+Xを押します。
catを使用して単語リストの内容を確認できます。
cat dotfiles.txt
先ほど追加したドットプレフィックス付きファイル名のリストが表示されるはずです。
.env
.git
.htaccess
.bashrc
.profile
.ssh
.hidden_config
この単語リストは、ターゲット Web サーバー上のこれらの特定のファイルの存在を総当たり(brute-force)するために Gobuster によって使用されます。
この特定の単語リスト(wordlist)を使用して gobuster dir スキャンを実行する
このステップでは、作成したdotfiles.txt単語リストを使用してgobuster dirスキャンを実行します。ターゲットはhttp://127.0.0.1:8000で実行されているダミーWeb サーバーです。
gobuster dirの基本的な構文は次のとおりです。
gobuster dir -u <ターゲットURL> -w <単語リストのパス>
ここで、-uはターゲット URL を指定し、-wは単語リストへのパスを指定します。
ターミナルで以下のコマンドを実行します。
gobuster dir -u http://127.0.0.1:8000 -w ~/project/dotfiles.txt
コマンドの内訳を見てみましょう。
gobuster dir: ディレクトリ/ファイルの総当たりスキャンを実行したいことを指定します。-u http://127.0.0.1:8000: ターゲット URL をローカルのダミーWeb サーバーに設定します。-w ~/project/dotfiles.txt: Gobuster にカスタムdotfiles.txt単語リストを使用するように指示します。
コマンドを実行すると、Gobuster は単語リストを反復処理し、ターゲットサーバーにリクエストを送信し始めます。以下のような出力が表示され、検出されたファイルが示されるはずです。
===============================================================
Gobuster vX.X.X.X-XXXXX Linux/amd64
===============================================================
[+] Url: http://127.0.0.1:8000
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /home/labex/project/dotfiles.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/X.X.X
[+] Timeout: 10s
===============================================================
2024/01/01 12:00:00 Starting gobuster in directory enumeration mode
===============================================================
/.env (Status: 200) [Size: 20]
/.hidden_config (Status: 200) [Size: 27]
===============================================================
2024/01/01 12:00:00 Finished
===============================================================
ご覧のとおり、Gobuster は.envと.hidden_configファイルを正常に特定しました。どちらも200 OKステータスを返しており、アクセス可能であることを示しています。
--no-error フラグを使用して接続エラーを非表示にする
このステップでは、Gobuster の--no-errorフラグについて学びます。スキャンを実行する際、特に不安定なターゲットに対して、またはネットワークの問題に対処している場合、Gobuster は多くの接続エラーメッセージを出力する可能性があります。これらのエラーは出力を散らかし、正当な発見を見つけにくくすることがあります。
--no-errorフラグは、Gobuster にこれらの接続関連のエラーメッセージを抑制するように指示し、成功した発見に焦点を当てた、よりクリーンな出力を提供します。
Gobuster スキャンを再度実行しましょう。今回は--no-errorフラグを含めます。現在のローカルサーバーは安定していますが、このフラグは実際のシナリオで非常に役立ちます。
gobuster dir -u http://127.0.0.1:8000 -w ~/project/dotfiles.txt --no-error
安定したローカル環境では抑制すべき接続エラーがなかったため、出力は前のステップと似ていることに気づくでしょう。しかし、多くのリクエストと潜在的なネットワーク問題がある実際のシナリオでは、このフラグはノイズを大幅に削減します。
このフラグの主な目的は、関連性のないエラーメッセージをフィルタリングすることでスキャン結果の可読性を向上させ、実際の発見(例:200 OK 応答)に集中できるようにすることです。
機密ファイル漏洩の結果を分析する
この最終ステップでは、Gobuster スキャンから得られた結果を分析し、そのようなファイルを発見したことの影響を理解します。
前回の Gobuster スキャンの出力から、以下のファイルが見つかりました。
/.env(Status: 200) [Size: 20]/.hidden_config(Status: 200) [Size: 27]
200 OKステータスコードは、ファイルが見つかり、Web サーバー経由でアクセス可能であることを示しています。これは重要な発見です。
その影響を示すために、curlを使用して.envファイルに直接アクセスしてみましょう。
curl http://127.0.0.1:8000/.env
.envファイルの内容が表示されるはずです。
DB_PASSWORD=supersecret
これにより、機密情報(この場合はデータベースパスワード)が漏洩していることが明確に示されます。実際のシナリオでは、攻撃者はこの情報を使用してデータベースやその他のバックエンドシステムへの不正アクセスを得ることができます。
同様に、.hidden_configファイルにもアクセスを試みることができます。
curl http://127.0.0.1:8000/.hidden_config
出力:
This is another hidden file.
この特定のファイルには機密性の高いデータが含まれていないかもしれませんが、その発見は、隠されるべきファイルが公開アクセス可能であるという潜在的な設定ミスを示しています。これは、さらなる列挙や、より重要な資産の発見につながる可能性があります。
主なポイント:
- Web 偵察(reconnaissance)中は、常にドットで始まるファイルを確認してください。
200 OKステータスを持つそのようなファイルの存在は、情報漏洩の強力な兆候です。- 開発者およびシステム管理者は、サーバー設定(例:Nginx の
locationブロック、Apache のDirectoryディレクティブ)でルールを設定するか、ファイルを Web ルートの外に配置することにより、機密ファイルが Web サーバー経由で直接アクセスされないようにする必要があります。
この演習は、徹底的な偵察の重要性と、隠された脆弱性を明らかにする上での Gobuster のようなツールの力を浮き彫りにします。
まとめ
この実験では、Gobuster を使用してドットで始まる隠しファイルやディレクトリを発見する方法を学びました。まず、環境変数やバージョン管理データのような機密情報を含むことが多い、そのようなファイルの重要性を理解することから始めました。
次に、一般的なドットで始まるファイル名を含むターゲットを絞った単語リストを作成し、それを使用してダミーの Web サーバーに対してgobuster dirスキャンを実行しました。Gobuster が.envや.hidden_configのようなアクセス可能な隠しファイルを効果的に特定する方法を観察しました。さらに、接続エラーを抑制してスキャン出力をクリーンにするための--no-errorフラグについて学びました。
最後に、結果を分析し、.envファイルへの直接アクセスが重要な認証情報の漏洩につながる可能性を示しました。この実験は、Web アプリケーションにおける潜在的な情報漏洩の脆弱性を明らかにするために、偵察方法論にドットファイル列挙を含めることの重要性を強調しました。
このテクニックを習得することで、そうでなければ見過ごされる可能性のあるセキュリティリスクを特定し、報告する能力が向上します。
