概要
この記事は HackTheBox のマシン攻略の大まかな流れをまとめたものです。
foothold(初期侵入)→ User(横移動)→ Root(権限昇格)の3段階の流れを中心に、優先すべき確認箇所やよく使うコマンドを示します。
この記事について
対象読者
HackTheBoxで初めてのマシン攻略を目指す人。
とくに、マシンのWriteup(=解答)を読んでも何をやっているのかよく分からない人。
この記事の目的(やること)
- HTBマシン攻略の大局的な流れを示す
- よく登場するツールや手順を示す
この記事の目的でないこと(やらないこと)
- 環境構築(Kali Linuxのインストール等)
- 基本的なLinuxコマンドの解説
- 各ツールの細かい解説
注意
許可のないサーバーに対する攻撃は法律に違反します。
許可のないサーバーに対する攻撃は絶対に行わないようにし、HackTheBoxなど許可された環境に対してのみ実行するようにしてください。
マシン攻略の大局的な流れ
HackTheBoxのマシン攻略では、サーバーの中に存在するファイルuser.txtとroot.txtの中身を読み取ることが目標になります。
この目標を達成するためには、大まかに以下の3ステップをたどることになります。
- foothold(初期侵入):外部から脆弱性や認証漏れを突いて、まずはターゲット内に足がかり(低権限のシェルやファイルアクセス)を作るステップ。
- User(通常ユーザー権限取得):ターゲット上の通常ユーザー権限を確保して、そのユーザーのファイルや資格情報を調べるステップ。
- Root(権限昇格):管理者権限を取得してマシン上の全てへアクセスできる状態にする最終ステップ。
次のセクション以降ではこの各ステップの詳細を解説します。本記事ではLinuxマシンを攻略する前提で解説します。(Windowsでも基本的な流れ自体は同じです。)
1. foothold(初期侵入)
目標
footholdのステップではサーバーで利用されるサービスを調査することにより侵入口を発見し、初期侵入を実行します。
具体的には「サーバー上でコマンド実行できるようになること」が大きな目標になります。
攻略手順1:サービスの調査
始めに、どのようなポートがオープンになっているかを調査することにより、侵入口を発見します。ポートスキャンツールであるnmapを使い、以下のコマンドを実行します。
nmap -Pn -sV <IP>
ここで発見された各ポートに関して、さらなる調査を進めることになります。
続いて、nmapで発見された各ポートについて、そのポートで稼働しているサービス(HTTP、SSH、FTP、…)の性質を調査します。
調査に使うツールをすべて暗記している必要はありません。検索しながら情報を集め、HackTricksなどを参照して、侵害に使えそうな手段がないか調べるとよいでしょう。
ここでは例として、HTTPの調査の一例を示します。HackTheBoxの多くのマシンではHTTPが侵入口になることが多いため、まずはHTTPから調査することをお勧めします。
典型的には、以下に示すような調査を行うとよいでしょう。
- サイト機能の調査
- ディレクトリ・ファイル列挙
- サブドメイン列挙
サイト機能の調査
ブラウザでサイトを開き、どんなページがあるかを手動で巡回して調査します。後で攻撃につなげやすくするために、プロキシツールBurp Suiteを使ってリクエスト/レスポンスを記録・保存すると良いです。
ポイントは「どのページにフォームやファイルアップロード、ログイン、エラーメッセージがあるか」を把握することです。
ディレクトリ・ファイル列挙
意図せず公開されているディレクトリ・ファイルを探します。ディレクトリの列挙ツールは複数ありますが、ここではgobusterを使う例を示します。
gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -u http://TARGET_IP
見つけたファイルはステータスコード、サイズ、タイムを見て「意味のありそうなもの」を優先して調査します。
サブドメイン列挙
サブドメインを列挙して、サブドメインに管理画面や開発環境が存在しないかを確認します。
代表的な列挙コマンド例:
gobuster vhost --domain example.com --append-domain -u http://SERVER_IP -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
攻略手順2:初期侵入
初期侵入の目的はマシンの入口を見つけ、シェルを取得し、サーバー上でコマンド実行ができる状態にすることです。
前手順で調査したポートやそのポートで稼働しているサービスをもとに、初期侵入します。
ここでもHTTPを例にすると、まずは以下に示すパターンを調査するとよいでしょう。
- 既知脆弱性・既知エクスプロイト
- リモートコード実行(RCE)
- 認証情報の漏洩
既知脆弱性・既知エクスプロイト
公開されている脆弱性情報(CVE)や既存のエクスプロイト、脆弱なデフォルト設定や古いバージョンのサービスを狙う手法です。
事前に調査したサービスのバージョン情報等をもとに、該当する脆弱性やエクスプロイトが無いかを調査して試行します。
PoC/Exploitだと偽ってマルウェアを配信するという事例が報告されているため、Exploitの中身は必ず確かめてから実行するようにしましょう。
リモートコード実行(RCE)
Webアプリの実装不備を突いてリモートでコードを実行し、侵入する手法です。
RCEが成立すればシェルを確保したり、ファイルを取得したりすることが可能になります。典型的に確認するポイントは次のとおりです。
- OSコマンドインジェクションによるコマンド実行
- SSTI(サーバーサイドテンプレートインジェクション)によるコマンド実行
- ファイルアップロードによるWebシェルの確立
- SQLインジェクションでのOSコマンド実行
これらの脆弱性を利用してリバースシェルを確立すれば、ターゲット上で自在にコマンドを実行できます。リバースシェル確立の大まかな流れを以下に示します。
-
攻撃者側:リバースシェルの通信を待ち受ける
nc -lnvp 4444 -
ターゲット側:リバースシェル・ペイロード実行
発見した脆弱性を用いてリバースシェルを確立するためのコマンドをターゲット側で実行させます。コマンドの作成についてはReverse Shell Generatorが便利です。
認証情報の漏洩
Webアプリの脆弱性を利用する等の手法により、認証情報を取得することでサービスへのログインを達成します。
典型的には以下のようなものを確認するとよいでしょう。
- SQLインジェクション
- パストラバーサル
- 認証認可の不備
これにより得た認証情報を用いて「SSHでログインする」「リモートコード実行のために悪用する」などのさらなる侵害を実行することにより初期侵入を達成します。
2. User(通常ユーザー権限取得)
目的
footholdにより侵入の足場を築いた後、別のユーザーへと権限昇格することによりターゲット上の通常ユーザー権限を確保します。
footholdとUserは明確に区別されたステップではなく、footholdが完了した段階でUserも完了しているケースは多いです。
これを達成した段階でuser.txtを獲得することができます。
攻略手順
権限昇格を達成するための方法は多岐にわたります。
ここでは、Userステップにおけるよくあるシナリオを2つ紹介します。まずはこの2つが無いかを調査してみるとよいでしょう。
- 設定ファイル等から認証情報取得
- DBから認証情報取得
また、後述する LinPEAS を実行することによる権限昇格の調査も有効です。
設定ファイル等から認証情報取得
footholdを達成した段階で、サーバー内の一部ファイルを閲覧することが可能な権限を持つ状態です。認証情報が置かれたファイルを発見することにより、権限昇格を達成します。
典型的なパターンとしては、webサーバー関連の設定ファイルが格納されている/var/www/htmlのようなディレクトリに特定の文字列が書かれたファイルは無いか調査してみるとよいでしょう。
grep -r "password" /var/www/html
DBから認証情報取得
Webアプリケーションで利用しているDBサーバーにログインし、認証情報を取得します。
DBにログインするためには前述の設定ファイル等から取得した認証情報を取得するケースが多いです。
例として、mysqlへのログインは以下のコマンドで実行できます。
mysql -u <USER> -p
権限取得後
通常ユーザー権限を獲得した段階で、user.txtの取得が可能です。user.txtはユーザーディレクトリ配下に置かれていることがほとんどです。以下でファイルを閲覧してみましょう。
cat /home/<USER>/user.txt
3. Root(権限昇格)
目的
一般権限のユーザーの状態では「何でも」はできません。一部のファイルしか閲覧できない、一部のコマンドしか実行できない、…などといった制約が存在する状態です。
マシンを完全に侵害し「何でも」できるようにするためには、管理者権限を取得する必要があります。それがこの最後のステップである権限昇格の目的になります。
攻略手順
権限昇格を達成するための方法は多岐にわたります。まずは権限昇格の列挙ツール LinPEAS を実行してみるとよいでしょう。
./linpeas.sh
ただし、このLinPEASは大量の結果が出力されるため、内容を精査するには慣れが必要です。まずは以下で挙げるような典型的な権限昇格ができないかを確認してみましょう。
- 不適切なSUIDバイナリ
- 不適切なsudo設定
- 不適切なCronジョブ
- 設定ファイル等から認証情報取得
不適切なSUIDバイナリ
SUIDが付いたバイナリは、実行時にファイル所有者の権限で動作します。不適切に設定されたSUIDバイナリは、一般ユーザーが権限昇格に利用できることがあります。
LinPEASでは以下の箇所にSUIDがついたバイナリの一覧が表示されます。

コマンドで確認する場合は以下のようなコマンドを使うとよいでしょう。
find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2> /dev/null
ここで検出されたバイナリを利用した権限昇格方法はGTFOBinsにまとめられています。これを適宜参照するとよいでしょう。
不適切なsudo設定
sudoの設定次第で、ユーザーが制限付きコマンドをroot権限で実行することにより権限昇格できてしまうことがあります。
LinPEASでは以下の箇所にsudo関連の設定が表示されます。

コマンドで確認する場合は以下のコマンドを使うとよいでしょう。
sudo -l
不適切なSUIDバイナリと同様、sudoによる権限昇格方法もGTFOBinsにまとめられています。
不適切なCronジョブ
定期実行されるCronジョブがrootや高権限でスクリプトを実行しており、そのスクリプトや参照ファイルが書き換え可能なら、権限昇格に結びつきます。
LinPEASでは以下の出力の箇所にcron関連の設定が表示されます。
コマンドで確認する場合は以下のコマンドを使うとよいでしょう。
# cron jobの確認
cat /etc/crontab
# cron関連のファイルを発見する
ls -lah /etc/cron*
これにより悪用可能なcronジョブを発見したうえで、スクリプトや参照ファイルを権限昇格用の内容に書き換えることにより権限昇格を達成します。
設定ファイル等から認証情報取得
Userの箇所で見たものと同様、平文の認証情報を発見することにより権限昇格を達成します。
権限取得後
rootへの権限昇格を達成すると、任意のファイルを閲覧することが可能になります。すなわち/root配下のファイルも閲覧することが可能です。
cat /root/root.txt
まとめ
本記事ではHackTheBoxのMachine攻略の大まかな流れ foothold → User → Root の各ステップについて解説しました。
次回は今回の内容をもとにマシンを実際に攻略する流れを示す予定です。
