NECサイバーセキュリティ戦略統括部 セキュリティ技術センターの長浜です。
今回は、ディレクトリスキャンツール feroxbuster [1]の紹介をしたいと思います。
昨年、NECブログでもFFUF(Fuzz Faster you Fool)を紹介いたしました[2]。今回は、feroxbusterとFFUFとの違いを比較しながら紹介していきます。私も普段はFFUFを利用していましたが、ある条件ではスキャンできないということがわかり、別のスキャナを調査していました。使いやすいツールなのでぜひともご利用いただければと思います。
FFUFの使用で直面した問題
Hack The BoxのFlusteredというRetiredマシンを解いていた際に問題を感じました。本マシンでは、接続時に認証が必要なプロキシサーバ経由でないとアクセスできないWebページが存在しました。そのWebページに対しディレクトリスキャンを実施しようとした際の出来事です。
FFUFやgobuster [3]で、認証情報をURLに埋め込んだProxyを指定(http[:]//(ID):(PASSWORD)@IPアドレス)すると、ProxyのURLフォーマットエラーが発生して利用できないことがわかりました。回避策としてBurpのUpstream Proxy Serversに認証サーバを設定するなどすることで、FFUFからのスキャンも可能です。しかし、Burp経由のスキャンを実施するとスキャン時間を要するため、別のツールを探していました。
ツールの調査をしていく中で、feroxbusterにたどり着きました。feroxbusterであれば、認証情報付きのサーバに対してもスキャンが可能でした。
改めて確認して、後から気づきましたが、FFUFを実行する際に” Proxy-Authorization: Basic (Base64でエンコードした認証情報)”をHeaderに付与することでスキャン可能であることを確認しました。
FFUFとferoxbusterの違い
FFUFとferoxbusterの違いを確認してみます。大きな違いとしては、FFUFはディレクトリスキャンだけではなく、様々なパラメータに対してファジングが可能です。一方で、feroxbusterはディレクトリスキャンに特化しており、そのスキャン機能がFFUFよりも強力です。以下に簡単な比較表を作成しました。
feroxbusterの特徴は、「Directory-Listing検知機能」と「ページ内リンク収集機能」、「自動フィルター条件追加機能」、「ページ内ワード収集機能」、「拡張子自動追加機能」、「バックアップファイル探索機能」の6点があります。また、実行中の画面に関しては、feroxbusterのほうが、進捗状況を把握しやすくなっていました。
それでは、使い方とそれぞれの特徴の紹介を行います。
feroxbusterの使い方
動作環境
- Kali Linux on WSL
- feroxbuster 2.6.4
- FFUF 1.5.0 (比較用)
- 検査対象
- nginxにて、必要な環境を整備しました。検査対象の環境は以下のようなディレクトリ構成になっています。具体的な構成の紹介は省略いたします。
|-- normal (通常検査用)
| |-- index.html
| |-- test.html
| `-- user
| `-- user.html
|-- dir
| |-- index.html
| |-- test.html
| `-- user (Enable autoindex)
| `-- supersuperuser.html
|-- link
| |-- index.html
| |-- new_test_page_developer_only.html
| |-- test.html (new_test_page_developer_onlyへのリンクが記載されている)
| `-- user (Enable autoindex)
| `-- supersuperuser.html
|-- filter (500などのエラーを全てerror.htmlにリダイレクトさせる)
| |-- error.html
| |-- index.html
| |-- test.html
| `-- user
| `-- user.html
|-- word
| |-- index.html
| |-- supersuperuser.html
| `-- test.html (supersuperuserという文言が含まれている)
|-- autoadd
| |-- index.html
| |-- index.php
| |-- test.html
| `-- test.php
`-- backup
|-- index.html
|-- test.html
|-- test.html.bak
`-- user
`-- user.html
基本的な使い方
まずは、feroxbusterの動作確認を行います。ここでは、再帰オプションなしで実行し、結果の見方などを紹介します。
feroxbusterでは、デフォルトで再帰処理が有効化されています。-n を指定して実行することで再帰オプションなしでferoxbusterを実行できます。
全体、およびディレクトリ単位の進捗率の表示などがあり、検査の状況が非常に見やすくなっています。また、検査結果と進捗状態の表示場所が分けられているため、結果のみの確認もしやすくなっています。
結果の確認方法を紹介いたします。まずは、全体的な項目の説明です。上記の結果を対象に説明いたします。結果の表示エリアは、「検査設定情報」と「検出したページ」、「全体の進捗率」、「ディレクトリ単位の進捗率」の4つに分かれています。ここでは、「検出したページ」と「全体の進捗率」、「ディレクトリ単位の進捗率」について説明いたします。
検出したページでは、サーバからのステータスコードや文字数、検出したURLが一覧でまとまっています。リダイレクト先があった際はそのURLも表示されます。
全体の進捗率は、黄色い#で進捗率を示し、実行終了予定時間や検出数を表示します。
ディレクトリ単位の進捗率は、青い#で進捗率を示します。本項目はディレクトリ数の増加に比例します。対象のサーバにてどれだけの数のディレクトリがあるのかを確認することができます。
feroxbusterとFFUFの実行結果画面の比較
feroxbusterとFFUFの比較を行います。今回は同じ条件で比較するため、再帰処理ありで比較をします。
まずは、feroxbusterを再帰オプションありで実行してみます。
先ほどの結果とは異なり、normal/user/user.html まで検出できていることが確認できます。ディレクトリ単位の進捗率についても、先ほどは normal に対してのみスキャンしていたのに対し、normal/user までスキャンされていることが確認できます。このように再帰的にスキャンを実行しても、検出したディレクトリ情報を含んだURLリストが出力されます。そのため、検出したページを指摘事項としてまとめやすくなっています。
次にFFUFを実行してみます。
FFUFでは、ディレクトリ単位でスキャンを実施していきます。FFUFの結果表示で特徴的なのは、各ディレクトリで検出したファイル名のみを表示するという点になります。そのため、検出したURLリストをまとめる際には、各ファイル名の前にディレクトリ名を確認して追加する必要があります。
また、スキャン対象のディレクトリを検出した際に、上記図の赤枠部分のような通知が出力されます。今回の環境では、1件の追加のみだったため視認性が低下することはありません。しかし、環境によっては件数が多くなることが見込まれます。件数が多くなることで、赤枠のような通知が増加しどこからどこまでがディレクトリのスキャンなのかを確認する時間が長くなってしまいます。
feroxbusterとFFUFの実行結果画面の比較を行いました。feroxbusterの結果の視認性が高いことが確認できたかと思います。
Directory Listing検知機能 [4]
それでは、feroxbusterの機能の紹介に入ります。1つ目はDirectory Listing検知機能です。これは、スキャン対象のWebサイトにてDirectory Listingが有効になっているディレクトリを検出し、通知してくれる機能です。検出した際には、そのディレクトリに対するワードリストのスキャンを実施しないため、スキャン時間の短縮につながります。そのままではDirectory Listingを検出したページに対して再帰的なスキャンが停止してしまうため、次に紹介する「ページ内リンク収集機能」を組み合わせることで再帰的なスキャンを継続できます。
では、実際に利用してみます。本機能はデフォルトで有効になっているため、オプションの入力は不要です。
/dir/userフォルダに対してDirectory listingが有効になっていることが確認できます。そして検査の時間が0sとなっているため、スキャンは実施されていないことが確認できます。結果の中(上図の右下)にも記載されていますが、-eオプションを付与することで、「ページ内リンク収集機能」を有効化できます。
ページ内リンク収集機能 [5]
htmlレスポンス内のaタグなどのリンクを収集し、検査対象のURLとして検査を実施します。そのため、Directory listingされたページを取得した際にも再帰的なスキャンが可能となります。
実際に利用してみます。本機能を利用するためには、-eオプションを付与する必要があります。
-eオプションを付与することにより、test.htmlに含まれていたaタグのリンク先とDirectory Listingで表示されたリンク先も検出ができていることが確認できます。全体の進捗率を確認すると、検査ワード数が8増加しているため、今回検出したリンクをワードリストに追加してスキャンした証拠となります。
自動フィルター条件追加機能
次は、フィルター条件追加機能について紹介します。
Webサーバにページが存在しない際に、404で応答するのではなく、302でエラーページにリダイレクトさせるサーバに対してスキャンする際、自動的にフィルターを指定したかのようにスキャンを実施してくれます。
これまで、私はFFUFなどでスキャンを実施する際には、以下のように実施していました。feroxbusterでは、自動でフィルターを追加してくれますので、以下のような手順が不要となります。
- サーバに対してスキャンを実施します。
- Webサイトから同じサイズのページが大量に応答があるのでいったん処理を停止します。
- 2で確認したサイズをフィルターに追加して再度実行します。
- ディレクトリスキャンの結果を確認します。
実際に利用してみます。本機能もデフォルトで有効になっているため、オプションは不要です。--dont-filterオプションを付与することで無効化できます。
wildcard response is static; auto-filtering 145 responses;とあり、同じレスポンスを自動的にフィルターに追加したことを通知しています。
ページ内ワード収集機能 [6]
続いて、「ページ内リンク収集機能」について紹介します。
これは、レスポンス内に含まれる単語を収集して検査のWordlistに追加する機能です。本機能を用いることで、ページ内の単語を列挙せずにスキャンを実施することができます。
本機能を利用する際には、-gオプションを付与します。
もともとwordlistに含まれていなかった supersuperuser.html を検出することができました。本単語は test.html に supersuperuser という単語が含まれていたためスキャンすることができました。
拡張子自動追加機能 [6]
index.phpなどの拡張子がついているファイルを検出したら、-x phpが追加されたかのようにスキャンを実施します。本機能を利用するためには、wordlistに index.php や index.html など拡張子がついたものが含まれている必要があります。ここでの動作確認の際にはwordlistを変更して実行します。
比較のため、まずはオプションなしで実行してみます。
index.phpと index.html しか検出していないことが確認できます。
続いて拡張子自動追加機能を利用してみます。-Eオプションを付与することで実行できます。
test.phpと test.html も検出されていることが確認できます。このように拡張子が初めからわからないシステムに対してのスキャンを実施する際に本オプションを利用できます。
バックアップファイル探索機能 [6]
最後の機能は、「バックアップファイル探索機能」です。これは、公開フォルダにある変更前のファイルを検出する機能です。.bakや .old などよくバックアップとして利用される拡張子を付与してスキャンを実施します。
実際に利用してみます。-Bオプションを付与することで実行できます。
バックアップファイルである test.html.bak を検出することができました。
まとめ
- feroxbusterは、ディレクトリスキャンツールです。多機能で非常に有用なツールであると思います。
- 同じくディレクトリスキャン機能を持つFFUFとの機能比較を行いました。FFUFのコンセプトが「高速なファジングツール」であるのに対し、feroxbusterはディレクトリスキャナであり、それぞれのツールの設計コンセプトは異なることが分かりました。そのため、feroxbusterはFFUFの置き換えではなく、検査内容に応じて適切に使い分けて利用していくのがよいかと思います。
- 本ブログの最後にferoxbusterで利用可能なオプションの説明を記載しています。利用する際のご参考となれば幸いです。
参考資料
[1] https://epi052.github.io/feroxbuster-docs/docs/
[2] https://group.nec/jp/ja/solutions/cybersecurity/blog/210604
[3] https://github.com/OJ/gobuster
[4] https://epi052.github.io/feroxbuster-docs/docs/examples/detect-directory-listing/
[5] https://epi052.github.io/feroxbuster-docs/docs/examples/extract-links/
[6] https://epi052.github.io/feroxbuster-docs/docs/examples/dynamic-collections/
付録:feroxbusterのオプションの説明
feroxbusterで使えるオプションを以下にまとめています。各オプションに対してどういった機能かの説明をつけていますのでご利用の際のご参考になれば幸いです。
ここでのオプションは feroxbuster 2.6.4を対象としたものになります。
認証Proxyも指定可能
(動作を確認しましたが、うまく機能していないようです)
95%マッチしたものに関しては、非表示
(2020年度下期)
(条件に関しては、ツールのDocumentを参考してください)
(条件に関しては、ツールのDocumentを参考してください)
0の場合無制限
--jsonを指定することでjson形式で出力
--json形式がないと、検出したURLをリストで提示
執筆者プロフィール
長浜 佑介(ながはま ゆうすけ)
セキュリティ技術センター リスクハンティング・アナリシスグループ
主にペネトレーションテスト、脆弱性診断などを担当しNECグループのセキュア開発・運用を推進。
2020年6月にIPA 産業サイバーセキュリティセンター中核人材育成プログラムを修了。
情報処理安全確保支援士(RISS)を保持。