
ゆるいぞIT
今回はディレクトリ探索という手法を用いてWebサーバに隠されているディレクトリやファイルなどの情報を見つけてみましょう。
※Youtubeでは動画版をご視聴いただけます。
- ハッキングスキルについて知りたい
- セキュリティの知識を学習したい
- ITインフラの知識を学習したい
※実務や演習等を除き、インターネット上のサーバへクラッキングすることは違法行為となりますのでご注意ください。
0.使用する環境

ゆるいぞIT
本演習で使用する”ソフトウェア“や”環境構成“は下記になります。
ソフトウェア
- 仮想環境 : Virtual Box
- 攻撃用サーバ : Kali Linux
- ターゲットホスト : Metasploitable2
演習環境

① 赤い枠線内 : 物理環境
② 青い枠線内 : 仮想環境
③ ホストOS : 物理PC(Windows11)
④ 無線LANルータ : ルータ経由でインターネットに接続
⑤ 攻撃用サーバ : Kali Linux
⑥ ターゲットホスト : Metasploitable2
1.演習の流れ

ゆるいぞIT
演習環境 ⑤Kali linix → ⑥ターゲットホスト へ対してディレクトリ探索を実行します。
ターゲットホストに対してディレクトリ探索用のコマンド(ツール)を実行
コマンド(ツール)の出力結果について確認し、実際のWebページへアクセス
複数のコマンド(ツール)を実行し、各コマンドの使い勝手について比較
2.Webサーバのディレクトリとは?
「Webサーバのディレクトリ」というのは、Webサイト内のリソースのことを指しています。
WebサイトはPCやサーバのフォルダ構成と同じで、いくつかの階層構造のような作りになっており、その中にディレクトリやファイル、サイトのページ情報などのリソースが格納されています。

例としてYahooニュースのサイトを見てみましょう。
ニュースのトップページのURLは「news.yahoo.co.jp」になります。
国内というタブに移動するとURLが「news.yahoo.co.jp/categorise/domestic」に変わります。
国際というタブに移動するとURLが「news.yahoo.co.jp/categorise/world」に変わります。
経済というタブに移動するとURLが「news.yahoo.co.jp/categorise/business」に変わります。
さらに経済の中の別な記事に移動してみるとURLが「news.yahoo.co.jp/pickup/6526274」に変わります。
このようにWebサイトはページごとに箱のようなものがあり、その中にカテゴリーやそれぞれに紐づく記事が格納されています。

ユーザがWebサイトとして閲覧できるページはサイト管理者が許可している部分のみなので余計なリソースが見えないようになっていますが、実際にはディレクトリやファイル等の情報が含まれていたりします。
3.ディレクトリ探索の実行

ゆるいぞIT
ディレクトリ探索には”gobuster”というコマンド(ツール)を使用します。
コマンドを実行してインストールされていなければ「インストールしますか?」と聞かれるので”yes”でインストールします。
$ gobuster -h

ターゲットIP、任意のワードリストを指定します。(今回は”common.txt”を使用します。)
$ gobuster dir -u http://<ターゲットIP> -w /usr/share/wordlists/dirb/common.txt

特定のファイル(拡張子)を探索することも可能です。
$ gobuster dir -u http://<ターゲットIP> -w /usr/share/wordlists/dirb/common.txt -x txt

4.出力結果の確認
gobusterの出力結果
”gobuster”を実行すると下記のような結果が返ってきます。

① 実行の概要 (ターゲットURL、使用したワードリスト、HTTPメソッドなど)
② ディレクトリ名 (/.htpasswd、/.htaccess、/phpMyAdminなど)
③ HTTPのステータスコード (403:閲覧権限無し、301:リダイレクト、200:アクセスOKなど)
出力結果を元にブラウザでも確認してみましょう。
まずはトップページ ( http://10.0.0.5 ) にアクセスします。

次に探索結果で出力された「/.htpasswd」にアクセスしてみると”Forbidden“となりアクセスできません。
これはHTTPステータスコードが”403”となっていた為です。

「/phpinfo」というページにアクセスしてみるとPHPの設定情報が表示されます。
このページはHTTPステータスコードが”200”ので閲覧可能なページになっています。

ファイル検索(オプション)を実行した場合はディレクトリに加えてテキストファイルも追加されます。
「/.htaccess.txt」や「/.htpassed.txt」などディレクトリ探索では見つからなかったファイルが見つかりました。

一見何も無さそうなWebページでもディレクトリを探索してみると何かしらの情報が見つかる可能性があります。
再帰的スキャンについて
”gobuster”の探索結果を見てもらいましたがgobusterは再帰的スキャンに対応していない為、全てのディレクトリやファイルを探索することができません。
例えば「phpMyAdmin」というディレクトリがあったと思いますが、本来であれば”phpMyAdmin“の配下にもディレクトリやファイルが存在しています。
しかし、再帰的スキャンが使用できないと一番トップにある「phpMyAdmin」のディレクトリしか見つけることができません。
このあと見ていく”feroxbuster”や”FFUF”などのツールは再帰的スキャンに対応しているので全てのディレクトリやファイルを発見することができます。
5.ディレクトリ探索用のコマンド(ツール)比較

ゆるいぞIT
”gobuster”以外にもディレクトリ探索用のコマンドがあり、基本的な機能は同じですが探索範囲の特徴が異なります。
feroxbusterの実行
”feroxbuster”はディレクトリスキャンに特化したツールとなっており、下記の機能が備わっています。
- 再帰的スキャン
- Directory-Listing検知機能
- ページ内リンク収集機能
- 自動フィルター条件追加機能
- ページ内ワード収集機能
- 拡張子自動追加機能
- バックアップファイル探索機能
コマンドを実行すると「インストールしますか?」と聞かれるので”yes”でインストールします。
$ feroxbuster

ターゲットIP、任意のワードリストを指定します。(今回は”common.txt”を使用します。)
$ feroxbuster -u http://<ターゲットIP> -w /usr/share/wordlists/dirb/common.txt

▼ファイル検索
$ feroxbuster -u http://<ターゲットIP> -w /usr/share/wordlists/dirb/common.txt -x txt
▼ページ内リンク収集
$ feroxbuster -u http://<ターゲットIP> -w /usr/share/wordlists/dirb/common.txt -e
▼再帰的スキャンを実行しない
$ feroxbuster -u http://<ターゲットIP> -w /usr/share/wordlists/dirb/common.txt -n
表示結果は概ね”gobuster“と同じになります。
上の部分が探索の概要、その下に表示されているのがディレクトリの探索結果になります。

“####“で探索の進捗状況が表示されます。

再帰的スキャンに対応しているので”gobuster“では表示されなかったディレクトリ情報(階層)も表示されています。

例えば「http://10.0.0.5/dvwa/README」には”DVWA”にログインする為のユーザアカウント(デフォルト設定)が記載されています。
実際にこのアカウント情報を使用することでログインすることができます。


ディレクトリやファイルの探索から、こういった情報も見つけることができるということも分かったかと思います。
FFUFの実行
“FFUF“は”Fuzz Faster You Fool”の略でファジングを高速・簡潔に実行するWEBファジングツールになっており、下記の機能が備わっています。
- 再帰的スキャン
- GETパラメータのファジング
- HOSTヘッダーのファジング
- HOSTヘッダーのファジング
基本的な使い方は”gobuster“、”feroxbuster“と同じですが、コマンドの指定が少し異なります。
探索対象を”FUZZ“と指定することで、指定した場所(ディレクトリやファイル)を探索するという作りになっています。
デフォルトでは再帰的スキャンが無効になっているので「–recursion」で有効にします。
$ ffuf -u http://<ターゲットIP>/FUZZ -w /usr/share/wordlists/dirb/common.txt –recursion

前者と表示結果の違いとしてはグループ単位で分かれて出力されるという点になります。
/dav配下を検索した結果を見てみると個別に表示されるのではなく、グループ化されて表示されています。

GETパラメーターを指定する場合は-uオプションでURLを指定しファジングしたい箇所を”FUZZ”にして実行します。
下記コマンドの場合はadmin(ユーザ名)のパスワードをGETする指定になります。
$ ffuf -u ‘http://10.0.0.5?login_username=admin&login_password=FUZZ’ -w /path/to/wordlist
6.最後に
探索用にコマンドはたくさんありますが、学習目的であれば”gobuster“で概要を把握した後に”feroxbuster“や”FFUF“で知識を深めていくとよいかと思います。
ということで、今回はここまでにしたいと思います。
それではまた次回お会いしましょう!