今回は、HTB(Hack The Box)Labの「Starting Point」のTier 1マシン「Sequel」を攻略していきます。
「Sequel」は、SQLをテーマにしたマシンです。
マシンを攻略する前に、SQLについて簡単に調べておくと、効率的に学習を進められます。
なお、本記事では、Kali LinuxからHTBへVPN接続して、マシンを攻略します。
まだ、環境構築が済んでいない方は、以下の記事をご覧ください。
サイバーセキュリティ入門‐環境構築編1|VirtualBoxの導入
サイバーセキュリティ入門‐環境構築編2|Kali Linuxの導入と初期設定
サイバーセキュリティ入門‐環境構築編3|HTBのアカウント作成とVPN接続
※本サイトでは、HTBの記事作成ガイドラインに沿って、記事を作成しています。
1.「Sequel」の学習準備
まずは、以下の手順に従って、「Sequel」の学習準備を済ませましょう。
- HTB Labsにログイン
- 今回学習に使う「Sequel」の学習ページを開く
- 学習タスクのリスト上部にある「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「During our scan, which port do we find serving MySQL?」
設問の意味は、「MySQLが動いているポートはどれですか?」です。
では、ターミナルを開いて、以下のコマンドでポートスキャンを実行しましょう。
$ nmap -T4-sV $IP
※-T4:高速スキャン用のオプション。
※-sV:動いているサービスのバージョンを検出するスキャンオプション。
すると、以下のようなスキャン結果が返ってきます。

スキャン結果より、Task1の正解は「3306」と分かります。
3.Task2「What community-developed MySQL version is the target running?」
設問の意味は、「マシン上では、どのようなバージョンのMySQLが稼働していますか?」です。
Task1のポートスキャンで、サービスが動いているポートが判明したので、次は動いているサービスの詳細を調べます。
動いているサービスについて詳細を調べるために、今回はNSE(Nmap Scripting Engine Script)を使ってみましょう。
NSEは、Luaという言語で書かれた「サービス調査や脆弱性のチェックを自動化するスクリプト」です。
では、以下のコマンドでポートスキャンを実行しましょう。
$ nmap -p3306 -sV -sC $IP
※-p:ポートを指定するためのスキャンオプション。
※-sV:バージョンを特定するオプション。
※-sC:デフォルトのNSEスクリプトを実行するオプション。
すると、以下のようなスキャン結果が返ってきます。

よって、Task2の正解は「MariaDB」です。
スキャン結果から読み取れる内容
- 「Protocol: 10」: MySQLプロトコルのバージョンは10
- 「 Version: 5.5.5-10.3.27-MariaDB-0+deb10u1」:
- MariaDBのバージョンは10.3.27
- Debian 10(Linuxディストリビューション)向けのパッケージ
- 「Some Capabilities:」:MySQの機能一覧
- 「Salt: ?rA,YZ9LS;m5`aH#tA)E」:認証時に使用するソルト値
- 「Auth Plugin Name: mysql_native_password」:MySQLの古い認証方式
4.Task3「When using the MySQL command line client, what switch do we need to use in order to specify a login username?」
設問の意味は、「MySQLのコマンドラインを使用する際、ログインユーザー名を指定するには、どのようなオプションを使えばいいですか?」です。
では、 MySQLのヘルプコマンドを使って、ログインユーザー名を指定するを探してみましょう。
$ mysql -?
すると、以下のような記述が見つかりました。

上記から、Task3の正解は「-u」だと分かります。
5.Task4「Which username allows us to log into this MariaDB instance without providing a password?」
設問の意味は、「どのようなユーザー名を使えば、パスワードなしでログインできますか?」です。
Task4の正解は「root」です。
rootユーザー
MySQLをインストールすると、あらゆる操作が可能な「root」というアカウントが作られます。
rootユーザーはデフォルトでパスワードが設定されません。
そのため、初期設定でMySQLを運用すると、パスワードなしでログインできてしまうため非常に危険です。
6.Task5「In SQL, what symbol can we use to specify within the query that we want to display everything inside a table?」
設問の意味は、「SQLにおいて、テーブルの全ての内容を表示するように指定するクエリの記号は、どのようなものですか?」です。
Task5の正解は「*」です。
7.Task6「In SQL, what symbol do we need to end each query with?」
設問の意味は、「SQLでは、各クエリの最後にどのような記号を付ける必要がありますか?」です。
実際にMySQLにログインすると以下のような内容が表示されます。

ログイン画面に、「Commands end with ; or \g.(コマンドは「;」または「\g」で終了します。)」という表示があります。
よって、Task6の正解は「;」です。
8.Task7「There are three databases in this MySQL instance that are common across all MySQL instances. What is the name of the fourth that's unique to this host?」
設問の意味は、「このMySQLインスタンスには、すべてのMySQLインスタンスに共通するデータベースが3つあります。このホスト固有の4つ目のデータベースの名前は何ですか?」です。
まずは、実際にMySQLにログインする必要があります。
Task3とTask4の知識を使って、ログインしてみましょう。
MySQLにログインするコマンドは、以下の通りです。
$ mysql -u root -h $IP
なお、上記のコマンドを実行した際に、
ERROR2026(HY000):TLS/SSLerror:SSL is required, but the server does not support it
というエラーが表示される場合があります。
これは、クライアント側がSSL接続を要求しているのに対し、サーバー側がSSLをサポートしていない場合に発生します。
そうした場合は、以下のコマンドでログインを試してみてください。
$ mysql -u root -h $IP--skip-ssl
ログインに成功すると、以下のような文言が表示されます。

では、以下のコマンドでこのMySQLインスタンスに存在するデータベースの一覧を調べてみましょう。
MariaDB [(none)]> show databases;
すると、以下のような結果が返ってきます。

上記から、このMySQLインスタンスには、「htb」「information_schema」「mysql」「performance_schema」という4つのデータベースが存在することが分かります。
この内、以下の3つは、デフォルトで存在するデータベースです。
- 「information_schema」:MariaDBのメタデータ が入っている
- 「mysql」:MariaDBの管理データが入っている
- 「performance_schema」:MariaDBのパフォーマンス情報が入っている
よって、Task7の正解は「htb」です。
9.Task8「What is the command in MySQL to select a database to interact with?」
設問の意味は、「MySQLで操作するデータベースを選ぶコマンドは何ですか?」です。
Task8の正解は「use」です。
10.Task9「What is the command in MySQL to show the different columns for a given table?」
設問の意味は、「MySQLで、特定のテーブルのカラム情報を表示するコマンドは何ですか?」です。
Task9の正解は「describe」です。
※なお、「desc」でも同様に動作します。
11.Task10「Which table has a column named "flag"?」
設問の意味は、「flagという名前のカラムを持つテーブルはどれですか?」です。
まず、useコマンドで「htb」データベースを選択しましょう。
MariaDB [(none)]> use htb;
すると、以下のように「Database changed」と表示され、プロンプトが「MariaDB [htb]>」という表示に切り替わります。

では、「htb」データベースに、どのようなテーブルがあるか「show tables;」コマンドで調べてみましょう。

上記から、「htb」データベースには「config」「users」という2つのテーブルがあることが分かります。
それでは、「select * from {テーブル名};」というクエリで、「config」「users」の中身を、それぞれ見てみましょう。
すると、以下のように、「config」テーブルに、flagという名前のカラムが含まれていることが分かりました。

よって、Task10の正解は「config」です。
12.Submit Flag
Task10で調べた「config」テーブルの中身にあるflagに対応するランダムな文字列(今回であれば「7b4bec00d1a39e3dd4e021ec3d915da8」)を提出すれば、「Sequel」のマシン攻略完了です。
お疲れ様でした。
13.あとがき
今回は「Sequel」というマシンの攻略を通して、MySQLの基本的な操作とその脆弱性について学習しました。
今後も引き続き、「Starting Point」のマシンを攻略していくので、ぜひご覧ください。








