今回は、HTB(Hack The Box)Labの「Starting Point」のTier 1マシン「Crocodile」を攻略していきます。
「Crocodile」の攻略では、nmapやGobusterといったツールを使います。
マシンを攻略する前に、ツールの使い方について簡単に調べておくと、効率的に学習を進められます。
なお、本記事では、Kali LinuxからHTBへVPN接続して、マシンを攻略します。
まだ、環境構築が済んでいない方は、以下の記事をご覧ください。
サイバーセキュリティ入門‐環境構築編1|VirtualBoxの導入
サイバーセキュリティ入門‐環境構築編2|Kali Linuxの導入と初期設定
サイバーセキュリティ入門‐環境構築編3|HTBのアカウント作成とVPN接続
※本サイトでは、HTBの記事作成ガイドラインに沿って、記事を作成しています。
1.「Crocodile」の学習準備
まずは、以下の手順に従って、「Crocodile」の学習準備を済ませましょう。
- HTB Labsにログイン
- 今回学習に使う「Crocodile」の学習ページを開く
- 学習タスクのリスト上部にある「Start Machine」からマシンを起動
- VPN接続する
上記の手順は、別の「Starting Point」マシン攻略でも流れは共通です。
今回初めて「HTBのマシン攻略」に触れるという方は、以下の記事で学習準備について詳しく解説しているので、参考にしてください。
サイバーセキュリティ入門‐実践編1|実際にHTBのマシン「Meow」を攻略してみよう
1-1.取得したIPアドレスを変数に入れておこう
上記の「Start Machine」からマシンを起動したあと、画面にIPアドレスが表示されます。
マシンの攻略では、このIPアドレスを度々使うのですが、毎回入力するのは手間です。
そこで、IPアドレスに名前をつけて保存し、簡単に使えるようにしましょう。
ターミナルを開き、以下のコマンドを実行します。
$ exportIP={IPアドレス}
これで、IPアドレスを以下のように、「$IP」で使えるようになりました。
変数の使用例
$ echo $IP
$ ftp $IP
$ nmap $IP
1-2.回答時の注意点
HTBのVPNに接続する際、フルトンネル(全ての通信が強制的にHTBにルーティングされる)になることがあります。
そうした場合、Webブラウザで開いている学習ページへのアクセスも「HTB内部ネットワーク経由」になり、接続が不安定になる場合があります。
その結果、「Task」や「Submit Flag」の送信時、通信エラーが発生する場合があります。
「Task」や「Submit Flag」の送信に失敗する場合は、以下の方法を試してみてください。
- 一度VPN接続を切ってから、Task等を送信する
- Kali Linux側のブラウザではなく、Windows側のブラウザで、Task等を送信する
2.Task1「What Nmap scanning switch employs the use of default scripts during a scan?」
設問の意味は、「Nmapでスキャンする際に、デフォルトスクリプトを使用するスイッチはどれですか?」です。
Task1の正解は「-sC」です。
デフォルトスクリプト(NSE)については、「Sequel」マシン攻略でも触れているので、参考にしてください。
3.Task2「What service version is found to be running on port 21?」
設問の意味は、「ポート21で実行されているサービスのバージョンは何ですか?」です。
では以下のコマンドで、実際にポートスキャンを実行して、調べてみましょう。
なお、「-p21」というポート番号を指定するオプションを使って、スキャンする方法もあります。
$ nmap -sV -sC –top-ports 100 –open $IP
※「-sV」:サービス名とバージョンを検出する
※「-sC」:NSEのデフォルトスクリプトを実行する
※「–top-ports 100」:よく使われるポート上位100個をスキャンする
※「–open」:開いているポートだけ表示する
すると、以下のようなスキャン結果が返ってきます。

上記のスキャン結果から、Task2の正解は「vsftpd 3.0.3」だと分かります。
4.Task3「What FTP code is returned to us for the "Anonymous FTP login allowed" message?」
設問の意味は、「「匿名FTPログインが許可されました」というメッセージに対して、どのようなFTPコードが返されますか?」です。
実際にftpにログインすると、以下のようなメッセージが表示されます。

よって、Task3の正解は「230」です。
5.Task4「After connecting to the FTP server using the ftp client, what username do we provide when prompted to log in anonymously?」
設問の意味は、「FTPサーバーに接続した後、匿名でログインするように求められた場合、どのようなユーザー名を入力すればよいですか?」です。
Task4の正解は「anonymous」です。
匿名FTPについては、「Fawn」マシンの攻略でも触れているので、ぜひ参考にしてください。
6.Task5「After connecting to the FTP server anonymously, what command can we use to download the files we find on the FTP server?」
設問の意味は、「FTPサーバーに匿名で接続した後、FTPサーバー上で見つけたファイルをダウンロードするには、どのようなコマンドを使用すればよいでしょうか?」です。
Task5の正解は「get」です。
FTPの基礎的な操作についても、「Fawn」マシンの攻略で解説しているので、ぜひ参考にしてください。
7.Task6「What is one of the higher-privilege sounding usernames in 'allowed.userlist' that we download from the FTP server?」
設問の意味は、「FTPサーバーからダウンロードする「allowed.userlist」に含まれる、権限が高いと思われるユーザー名の1つは何ですか?」です。
まずは、以下のコマンドでftpに接続します。
$ ftp $IP
すると、ログインユーザー名を問われるので、「anonymous」と入力しましょう。
ログインに成功すると、以下のようなメッセージが表示され、プロンプトが「ftp>」というふうに切り替わります。

では、以下のコマンドで、ftpサーバー上に存在するファイル一覧を取得してみましょう。
ftp> ls
すると、以下のようなデータが返ってきます。

上記からは、このftpサーバー上に「allowed.userlist」「allowed.userlist.passwd」という2種類のファイルが存在することが分かります。
では、getコマンドで、allowed.userlistをダウンロードしましょう。
ftp>get allowed.userlist
以下のように表示されれば、無事にダウンロードできています。

ダウンロードに成功していれば、ローカルの「kali」に「allowed.userlist」が存在しているはずです。
allowed.userlistを開くと、以下のようなデータが表示されます。

上記から、Task6の正解は「admin」だと分かります。
8.Task7「What version of Apache HTTP Server is running on the target host?」
設問の意味は、「対象ホスト上で稼働しているApache HTTP Serverのバージョンは何ですか?」です。
では、Task2で実行したポートスキャンの結果をもう一度見てみましょう。

スキャン結果から、Task7の正解は「Apache httpd 2.4.41」と分かります。
9.Task8「What switch can we use with Gobuster to specify we are looking for specific filetypes?」
設問の意味は、「Gobusterで特定のファイルタイプを指定するには、どのスイッチを使えばよいですか?」です。
Task7の正解は「-x」です。
参考:gobuster/README.md at master
10.Task9「Which PHP file can we identify with directory brute force that will provide the opportunity to authenticate to the web service?」
設問の意味は、「ディレクトリの総当たり攻撃によって、Webサービスの認証に使われるPHPファイルはどれか特定できますか?」です。
ディレクトリの総当たり攻撃には、Gobusterというツールを使います。
Gobusterの使い方について詳しくは、「Appointment」マシンの攻略記事で解説しているので、ぜひ参考にしてください。
今回は設問で、「PHPファイル」と指定されているので、Task8の「-x」というオプションを使って、通常のディレクトリとphpファイルを対象に、ブルートフォースを行います。
では、ターミナルで、以下のコマンドを実行しましょう。
$ gobuster dir -u $IP-w /usr/share/wordlists/dirb/common.txt -x php
※「dir」:ディレクトリ探索の指定
※「-u」:対象URLの指定
※「-w」:使用するワードリスト(今回は/usr/share/wordlists/dirb/common.txt)の指定
※「-x」:ファイルタイプの指定
すると、以下のようなスキャン結果が返ってきます。

スキャン結果から、Task7の正解は「login.php」だと分かります。
11.Submit Flag
nmapによるスキャン結果によると、80番ポートで、Webサーバーが動いています。
では、このWebサーバーには、どのようなディレクトリが存在するのでしょうか。
まずは、先ほど、Gobusterで得たスキャン結果をもう一度見てみましょう。

スキャン結果を見ると、
- /assets
- /css
- /dashboard
- /fonts
- /js
という5つのディレクトリがあるようです。
では、一番falagがありそうな「{IPアドレス}/dashboard」をブラウザで開いてみましょう。
すると、ルーティングにより、「{IPアドレス}/login.php」に飛ばされ、以下のようなログイン画面が表示されます。

Task6より、「admin」というユーザー名は分かっています。
しかし、パスワードがわかりません。
そこで、Task6で、21番ポートで動いているftpサーバーから「allowed.userlist」をgetコマンドで取得したことを思い出しましょう。
よく見ると、ftpサーバーには「allowed.userlist.passwd」というログインパスワードが記載されたファイルもあります。
そこで、ftpサーバーにもう一度接続し、以下のコマンドで「allowed.userlist.passwd」をダウンロードしましょう。
ftp>get allowed.userlist.passwd
ダウンロードした「allowed.userlist.passwd」の中身を見ると、以下のようなデータが入っています。

Task6のユーザー名のデータを合わせると、
- ユーザー名:admin
- パスワード:rKXM59ESxesUFHAd
という組み合わせで、管理者としてログインできそうです。
早速試してみましょう。
すると、無事ログインに成功し、以下のような画面が表示されます。

ダッシュボード上部に「Here is your flag: c7110277ac44d78b6a9fff2232434d16」という記載があるので、このflagを提出しましょう。
これにて、「Crocodile」のマシン攻略完了です。
お疲れ様でした。
12.あとがき
今回は「Crocodile」というマシンの攻略を通して、nmapやGobusterといったツールの操作や、ftpサーバーの設定ミスから生じる脆弱性について学習しました。
今回使ったスキャンツール類は、ほかのCTF問題でもよく使用するので、使い方を覚えておきましょう。
今後も引き続き、「Starting Point」のマシンを攻略していくので、ぜひご覧ください。








