今回は、HTB(Hack The Box)Labの「Starting Point」のTier 0マシン「Redeemer」を攻略していきます。
「Redeemer」は、Redisと呼ばれるデータベースシステムについて学習できるマシンです。
マシンを攻略する前に、Redisについて簡単に調べておくと、効率的に学習を進められます。
なお、本記事では、Kali LinuxからHTBへVPN接続して、マシンを攻略します。
まだ、環境構築が済んでいない方は、以下の記事をご覧ください。
サイバーセキュリティ入門‐環境構築編1|VirtualBoxの導入
サイバーセキュリティ入門‐環境構築編2|Kali Linuxの導入と初期設定
サイバーセキュリティ入門‐環境構築編3|HTBのアカウント作成とVPN接続
※本サイトでは、HTBの記事作成ガイドラインに沿って、記事を作成しています。
1.「Redeemer」の学習準備
まずは、以下の手順に従って、「Redeemer」の学習準備を済ませましょう。
- HTB Labsにログイン
- 今回学習に使う「Redeemer」の学習ページを開く
- 学習タスクのリスト上部にある「Start Machine」からマシンを起動
- VPN接続する
上記の手順は、別の「Starting Point」マシン攻略でも流れは共通です。
今回初めて「HTBのマシン攻略」に触れるという方は、以下の記事で学習準備について詳しく解説しているので、参考にしてください。
サイバーセキュリティ入門‐実践編1|実際にHTBのマシン「Meow」を攻略してみよう
回答時の注意点
HTBのVPNに接続する際、フルトンネル(全ての通信が強制的にHTBにルーティングされる)になることがあります。
そうした場合、Webブラウザで開いている学習ページへのアクセスも「HTB内部ネットワーク経由」になり、接続が不安定になる場合があります。
その結果、「Task」や「Submit Flag」の送信時、通信エラーが発生する場合があります。
「Task」や「Submit Flag」の送信に失敗する場合は、以下の方法を試してみてください。
- 一度VPN接続を切ってから、Task等を送信する
- Kali Linux側のブラウザではなく、Windows側のブラウザで、Task等を送信する
2.Task1「Which TCP port is open on the machine?」
設問の意味は、「対象のマシンでは、どのポートが開いていますか?」です。
では、早速ターミナルを開きましょう。
今回は、nmapで全ポートを対象にスキャンを実行します。
しかし、デフォルト設定で全ポートスキャンをすると、とてつもなく時間がかかります。
そこで、今回は、高速でポートスキャンを実行できるオプションを使ってみましょう。
実行するコマンドは以下の通りです。
$ nmap -p---stats-every 5s --min-rate 5000{IPアドレス}
使用しているスキャンオプション
- 「-p-」:全(0〜65535)ポートを指定。
- 「--stats-every {秒数}s」:~~秒間隔で、スキャンの統計情報を出力。
- 「--min-rate {1秒当たりの送信パケット数}」:スキャン速度を指定。数字が大きいほど速い。
デフォルトでは、スキャン中に、「nmapがきちんと動いているのか」「全体の何割スキャンできているのか」といった情報がわかりません。
しかし今回は「--stats-every」オプションを使っているので、スキャン実行中、以下のような情報が5秒ごとに表示されます。

※上記の黄枠であれば、「スキャンは22.66%完了。推定所要時間44秒。スキャン開始から20秒経過」といったことが読み取れます。
スキャンが終わると、以下のような結果が表示されました。

スキャン結果から、Task1の正解は「6379」であると分かります。
3.Task2「Which service is running on the port that is open on the machine?」
設問の意味は、「開放されているポートでは、どのようなサービスが実行されていますか?」です。
先ほどのポートスキャン結果を見てみましょう。
黄枠部分からは「6379ポートが開いており、そこではredisというサービスが動いている」ということが分かります。

よって、Task2の正解は「redis」です。
4.Task3「What type of database is Redis? Choose from the following options: (i) In-memory Database, (ii) Traditional Database」
設問の意味は、「Redisは(i)インメモリデータベースと(ii)従来型データベースのどちらの種類のデータベースですか?」です。
まず、インメモリデータベースとは、ハードディスクやSSDではなく、主記憶装置(RAM)にデータを保存するシステムです。
インメモリデータベースは、RAMにデータを保存するので、データの読み書きが早いという特徴があります。
一方で、従来型データベースは、オンディスクデータベースとも呼ばれ、ハードディスクやSSDにデータを保存するシステムです。
こちらは、インメモリデータベースに比べて、データの読み書きが遅い反面、大容量のデータを低コストで保存できます。
そして、Redisはインメモリデータベースです。
よって、Task3の正解は「In-memory Database」です。
Redis(Remote Dictionary Server)とは
Redisは、オープンソースのインメモリーシステムです。
Redisには、さまざまな機能がありますが、ここでは、主要な特徴を紹介します。
- KVS(キーバリューストア):NoSQLの一種で、一意な「キー」と対応する「値」をセットで保存する形式。
- 豊富なデータ型:保存できる主な型は、「String」「List」「Set」「Hash」「Sorted set」「Vector set」「Stream」「Bitmap」「Geospatial」「JSON」「Time series」などがある。
- シャーディング:Redisでは、データは複数のサーバーに分散して保存(シャーディング)されます。シャーディングによって、サーバーへの書き込み負荷が軽減され、データの可用性も確保できる。
5.Task4「Which command-line utility is used to interact with the Redis server? Enter the program name you would enter into the terminal without any arguments.」
設問の意味は、「Redisサーバーとやり取りするために使用するコマンドラインツールは何ですか?」です。
Task4の正解は「redis-cli」です。
※redis-cliの基本的な使い方については、Redis CLI | Docsを参考にしてください。
6.Task5「Which flag is used with the Redis command-line utility to specify the hostname?」
設問の意味は、「redis-cliでホスト名を指定する際に使用するフラグは何ですか?」です。
Task5の正解は「-h」です。
7.Task6「Once connected to a Redis server, which command is used to obtain the information and statistics about the Redis server?」
設問の意味は、「Redisサーバーに接続した後、Redisサーバーに関する情報や統計情報を取得するには、どのコマンドを使用しますか?」です。
Task6の正解は「info」です。
参考:INFO | Docs
8.Task7「What is the version of the Redis server being used on the target machine?」
設問の意味は、「対象マシンで使用されているRedisサーバーのバージョンは何ですか?」です。
Task5・6で、ホスト名を指定するコマンドが「-h」、Redisサーバーに関する情報や統計情報を取得するコマンドが「info」であることが分かっています。
そこで、これらのコマンドを実際に使用して、「Redeemer」マシンで稼働しているRedisサーバーについて調べてみましょう。
まずは、以下のコマンドで、ホスト(IPアドレス)とポートを指定して、redisサーバに接続します。
redis-cli -h {IPアドレス}-p 6379
※「-p」は、ポートを指定するオプションです。
接続に成功すると、以下のように、プロンプトが「{IPアドレス}:{ポート番号}>」という表示に切り替わります。

続いて「info」コマンドを実行すると、以下のように、サーバー情報が表示されます。

上記のサーバー情報から、Task7の正解は「5.0.7」であると分かります。
9.Task8「Which command is used to select the desired database in Redis?」
設問の意味は、「Redisで目的のデータベースを選択するには、どのコマンドを使用しますか?」です。
Task8の正解は「select」です。
10.Task9「How many keys are present inside the database with index 0?」
設問の意味は、「インデックス0のデータベース内には、いくつのキーが存在しますか?」です。
先ほどTask7で、「info」コマンドによってサーバー情報を取得しました。
では、サーバー情報の末尾にある「Keyspace」という項目を見てみましょう。

Keyspaceの「db0:keys=4, expires=0, avg_ttl=0」という記述から、インデックス0(db0)にキーが4つあることが分かりました。
よって、Task9の正解は「4」です。
11.Task10「Which command is used to obtain all the keys in a database?」
設問の意味は、「データベース内のすべてのキーを取得するには、どのコマンドを使用しますか?」です。
Task10の正解は「keys *」です。
参考:KEYS | Docs
12.Submit Flag
まずは、以下のコマンドで、redisサーバーに接続しましょう。
redis-cli -h {IPアドレス}-p 6379
接続できたら、「keys *」コマンドで、データベース内のキー一覧を取得します。
すると、以下のように、データベース内に、目当ての「flag」キーがあることが分かりました。

では、「get」コマンドで、「flag」キーに格納されている値を見てみましょう。
すると、以下のようにランダム文字列が入っていることが分かります。

あとは、このランダム文字列をHTBの回答欄に入力すれば、「Redeemer」の攻略完了です。
参考:GET | Docs
13.あとがき
今回は「Redeemer」というマシンの攻略を通して、redis-cliの基本的な使い方について学習しました。
次回からは、「Starting Point」のTier1マシンの攻略にチャレンジしていくので、ぜひご覧ください。






