今回は、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」の学習準備を済ませましょう。



上記の手順は、別の「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秒ごとに表示されます。

https://i.gyazo.com/6cf4a88877d7aa303a4081ef75a0a5b3.png

※上記の黄枠であれば、「スキャンは22.66%完了。推定所要時間44秒。スキャン開始から20秒経過」といったことが読み取れます。


スキャンが終わると、以下のような結果が表示されました。

https://i.gyazo.com/1ad84458aa8fd4d6cbd64b1d39b3e082.png

スキャン結果から、Task1の正解は「6379」であると分かります。


3.Task2「Which service is running on the port that is open on the machine?」

設問の意味は、「開放されているポートでは、どのようなサービスが実行されていますか?」です。


先ほどのポートスキャン結果を見てみましょう。

黄枠部分からは「6379ポートが開いており、そこではredisというサービスが動いている」ということが分かります。

https://i.gyazo.com/1ad84458aa8fd4d6cbd64b1d39b3e082.png

よって、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では、データは複数のサーバーに分散して保存(シャーディング)されます。シャーディングによって、サーバーへの書き込み負荷が軽減され、データの可用性も確保できる。


参考:Develop with Redis | Docs


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」です。


参考:Redis CLI | Docs#usage


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アドレス}:{ポート番号}>」という表示に切り替わります。

https://i.gyazo.com/f974072938de614414f060375b928247.png

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

https://i.gyazo.com/417377d087b32458043aee5e8fd385ed.png

上記のサーバー情報から、Task7の正解は「5.0.7」であると分かります。


9.Task8「Which command is used to select the desired database in Redis?」

設問の意味は、「Redisで目的のデータベースを選択するには、どのコマンドを使用しますか?」です。


Task8の正解は「select」です。


参考:SELECT | Docs


10.Task9「How many keys are present inside the database with index 0?」

設問の意味は、「インデックス0のデータベース内には、いくつのキーが存在しますか?」です。


先ほどTask7で、「info」コマンドによってサーバー情報を取得しました。

では、サーバー情報の末尾にある「Keyspace」という項目を見てみましょう。

https://i.gyazo.com/1f60c692589feba72e9c6a9cc2a225e9.png

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」キーがあることが分かりました。

https://i.gyazo.com/a494533e668ba6027a7106f531a3d4e1.png

では、「get」コマンドで、「flag」キーに格納されている値を見てみましょう。

すると、以下のようにランダム文字列が入っていることが分かります。

https://i.gyazo.com/625b5a2e25b86c7ae3276237ffc4a562.png

あとは、このランダム文字列をHTBの回答欄に入力すれば、「Redeemer」の攻略完了です。


参考:GET | Docs


13.あとがき

今回は「Redeemer」というマシンの攻略を通して、redis-cliの基本的な使い方について学習しました。

次回からは、「Starting Point」のTier1マシンの攻略にチャレンジしていくので、ぜひご覧ください。