Skip to main content
bloodyAD is a Python tool for interacting with Active Directory over LDAP(S). It covers enumeration, ACL abuse, delegation attacks, shadow credentials, and object manipulation, all through a consistent subcommand structure without requiring a Windows box. Install: pip install bloodyAD or clone from CravateRouge/bloodyAD.

Authentication

bloodyAD supports multiple credential types on the same base command. Every command follows the pattern bloodyAD [auth flags] -d DOMAIN --host DC [subcommand].

Enumeration

The get and msldap subcommands cover the most useful recon paths. Start with get writable to immediately see what your current user can modify, then use get object to inspect specific targets.

Writable Objects

get writable is the first command to run after gaining a foothold. It shows every AD object your current user has write access to, which directly maps to abuse paths.

Object Attributes

get object reads LDAP attributes of any single AD object. Use it to inspect userAccountControl flags, retrieve LAPS passwords, gMSA secrets, or group membership before attempting abuse.

Membership and Hierarchy

These commands help map group relationships and OU structure without needing BloodHound ingested.
get search issues a raw LDAP query. Use it when no built-in subcommand covers what you need.

DNS Records

get dnsDump is useful for internal network mapping; it returns all DNS zone records the current user can read.

Trust Relationships

BloodHound Collection

get bloodhound runs the built-in BloodHound CE collector and writes a zip file for ingestion. Faster than running SharpHound from a Windows host when you already have LDAP creds.
Still in development. Covers core enumeration but not ADCS ESC paths or complex nodes. Supplement with SharpHound for full coverage.

Delegation Recon

These msldap subcommands find delegation misconfigurations that feed into unconstrained, constrained, and RBCD attack chains.

Legacy and Service Accounts

LAPS

BadSuccessor Check

ACL Abuse

ACL abuse flows directly from get writable output. These add, remove, and set commands let you exploit the rights you discovered in enumeration.

GenericAll / Full Control

Granting yourself GenericAll on an object gives complete control: you can change its password, modify its attributes, or add it to groups. Requires WriteDacl or ownership of the target.

Group Membership

Adding yourself to a privileged group (e.g., Domain Admins, Backup Operators) is the fastest path to elevated access when you have GenericAll or WriteProperty on the group.

Password Reset

Exploits ForceChangePassword or GenericAll rights. No knowledge of the current password is required.

Ownership

Taking ownership of an object lets you then grant yourself any rights via WriteDacl. Requires WriteOwner on the target.

DCSync Rights

DCSync requires the Replicating Directory Changes and Replicating Directory Changes All extended rights on the domain root. If you have WriteDacl on the domain object, you can grant yourself these.

Generic Attribute Write

set object writes any writable LDAP attribute directly. Use it for targeted Kerberoasting by adding an SPN to a user, or to clear attributes after abuse.

Delegation Abuse

RBCD abuse requires write access to msDS-AllowedToActOnBehalfOfOtherIdentity on the target computer. bloodyAD handles the attribute encoding automatically.
After setting RBCD, use getST.py to request the service ticket and then move laterally.

Shadow Credentials

Shadow Credentials abuse the msDS-KeyCredentialLink attribute. Adding a Key Credential to a target account allows authentication as that account via PKINIT without knowing its password. Requires GenericAll or WriteProperty on the attribute.
The add shadowCredentials command outputs the certificate files and NT hash directly. If PKINIT is blocked, use gettgtpkinit.py or Certipy auth manually with the generated cert.

UAC Manipulation

UAC flags control account behaviour: pre-auth requirements, password expiry, account status, and more. Setting or unsetting these flags requires GenericAll or WriteProperty on the account.

BadSuccessor (Windows Server 2025)

BadSuccessor is a privilege escalation path affecting Windows Server 2025 domain controllers. An attacker with CreateChild rights on any OU can create a delegated Managed Service Account (dMSA) that inherits the privileges of any existing account, including Domain Admins. First confirm the vulnerability exists:
If vulnerable, create a dMSA targeting a privileged account:
Then authenticate as the dMSA to get a TGT carrying the inherited privileges:

Object Management

These commands cover object creation, deletion, and DNS record manipulation. Computer account creation is commonly needed as a prerequisite for RBCD attacks when MachineAccountQuota is above 0.

Certifried (CVE-2022-26923)

Certifried abuses the fact that the AD CS Machine template uses dNSHostName as the certificate subject rather than the machine SID. A low-priv user with ms-DS-MachineAccountQuota > 0 can create a computer account, set its dNSHostName to match a DC, request a Machine cert, and use that cert to set up RBCD against the DC. Steps 1-3: Confirm quota, create computer account, and spoof dNSHostName.
Step 4: Request a Machine cert as the spoofed computer via Certipy.
Step 5: Use the cert to authenticate and retrieve the DC’s NT hash.
Step 6: Set RBCD on the DC to impersonate DA via S4U2Proxy.

Recycle Bin & Tombstone Reanimation

When the AD Recycle Bin is enabled, deleted objects are preserved as tombstones with most attributes intact. If you can read or write deleted objects, you may be able to restore a previously privileged account or read credentials that were on it before deletion.

Enumerate Deleted Objects

The LDAP control OID 1.2.840.113556.1.4.2064 unlocks visibility of deleted, tombstoned, and recycled objects in queries.

Restore a Tombstoned Object

Reanimation requires the Reanimate Tombstones extended right on the domain naming context, or ownership of the deleted object. Restore by SID (shown in the deleted object’s objectSid attribute).
After restoration the account is disabled and has no group memberships. Re-enable it, set a new password, and add it to the relevant groups to abuse any privileges it originally held.

Retention Settings

These attributes control how long objects remain accessible after deletion.

Global Flags Reference