
Outil pour exploiter automatiquement les chemins d'élévation de privilèges Active Directory affichés par BloodHound
autobloodyautobloody est un outil pour exploiter automatiquement les chemins d'escalade de privilèges Active Directory montrés par BloodHound.
Cet outil automatise l'escalade de privilèges AD entre deux objets AD, la source (celui que l'on possède) et la cible (celui que l'on veut) si un chemin d'escalade existe dans la base de données BloodHound. L'automatisation se compose de deux étapes :
bloodyADParce qu'autobloody repose sur bloodyAD, il supporte l'authentification par mot de passe en clair, pass-the-hash, pass-the-ticket ou certificats et se connecte aux services LDAP d'un contrôleur de domaine pour effectuer l'escalade AD.
Un package Python est disponible :
pip install autobloody
Ou vous pouvez cloner le dépôt :
git clone --depth 1 https://github.com/CravateRouge/autobloody
pip install .
Pour de meilleures performances, il est recommandé d'avoir la bibliothèque GDS installée dans Neo4j. Sans elle, autobloody utilisera des requêtes CYPHER natives qui sont plus lentes mais toujours fonctionnelles.
Un environnement BloodHound léger avec le plugin GDS peut être installé en lançant ./bloodhound-ce depuis https://github.com/CravateRouge/Single-User-BloodHound.
Les données doivent d'abord être importées dans BloodHound (par exemple avec SharpHound ou BloodHound.py) et Neo4j doit être en cours d'exécution.
⚠️ Les valeurs -ds et -dt sont sensibles à la casse
Utilisation simple :
autobloody -p 'Password123!' --host 192.168.10.2 -dp 'neo4jP@ss' -ds '[email protected]' -dt 'BLOODY.LOCAL'
Aide complète :
[bloodyAD]$ ./autobloody.py -h
usage: autobloody.py [-h] [--dburi DBURI] [-du DBUSER] -dp DBPASSWORD -ds DBSOURCE -dt DBTARGET [-d DOMAIN] [-u USERNAME] [-p PASSWORD] [-k] [-c CERTIFICATE] [-s] --host HOST [-y] [-v] [--timeout TIMEOUT]
AD Privesc Automation
options:
-h, --help show this help message and exit
--dburi DBURI The host neo4j is running on (default is "bolt://localhost:7687")
-du DBUSER, --dbuser DBUSER
Neo4j username to use (default is "neo4j")
-dp DBPASSWORD, --dbpassword DBPASSWORD
Neo4j password to use
-ds DBSOURCE, --dbsource DBSOURCE
Case sensitive label of the source node (name property in bloodhound)
-dt DBTARGET, --dbtarget DBTARGET
Case sensitive label of the target node (name property in bloodhound)
-d DOMAIN, --domain DOMAIN
Domain used for NTLM authentication (optional, default is dbsource domain)
-u USERNAME, --username USERNAME
Username used for NTLM authentication (optional, default is dbsource sAMAccountName)
-p PASSWORD, --password PASSWORD
Cleartext password or LMHASH:NTHASH for NTLM authentication
-k, --kerberos
-c CERTIFICATE, --certificate CERTIFICATE
Certificate authentication, e.g: "path/to/key:path/to/cert"
-s, --secure Try to use LDAP over TLS aka LDAPS (default is LDAP)
--host HOST Hostname or IP of the DC (ex: my.dc.local or 172.16.1.3)
-y, --yes Assume yes to apply the generated privesc
-v, --verbose Enable verbose output (-v for INFO, -vv for DEBUG)
--timeout TIMEOUT Connection timeout in seconds (default is 60)
Tout d'abord, un chemin d'escalade est trouvé en utilisant l'algorithme de Dijkstra implémenté dans la bibliothèque GDS de Neo4j. L'algorithme de Dijkstra permet de résoudre le problème du plus court chemin sur un graphe pondéré. Par défaut, les arêtes créées par BloodHound n'ont pas de poids mais un type (par exemple MemberOf, WriteOwner). Un poids est ensuite ajouté à chaque arête en fonction du type d'arête et du type de nœud atteint (par exemple utilisateur, groupe, domaine).
Une fois qu'un chemin est généré, autobloody se connecte au DC, exécute le chemin et nettoie ce qui est réversible (tout sauf ForcePasswordChange et setOwner).
Pour l'instant, seules les arêtes BloodHound suivantes sont prises en charge pour l'exploitation automatique :
Ce projet vous plaît ? Les dons sont les bienvenus
Besoin d'un soutien personnalisé ? Envoyez-moi un email pour des formations ou des fonctionnalités sur mesure.