bloodhound.py

Collecteur de données BloodHound en Python. Énumère Active Directory depuis Linux sans machine Windows : collecte utilisateurs, groupes, ordinateurs, sessions, ACL et trusts pour analyse dans BloodHound. Python-based BloodHound data collector. Enumerates Active Directory from Linux without needing a Windows machine — collects users, groups, computers, sessions, ACLs, and trusts for BloodHound analysis.

↗ https://github.com/dirkjanm/BloodHound.py

Overview

bloodhound.py is a Python alternative to SharpHound for collecting BloodHound data from Active Directory. It runs on Linux/macOS, requiring only valid AD credentials — essential for pentests where you don’t have Windows access or can’t run executables on Windows targets.

Installation

pip3 install bloodhound
# or
sudo apt install bloodhound.py

Basic Usage

Full collection

bloodhound-python -u user -p password -d domain.local -ns 10.10.10.1 -c All

DCOnly collection (less noisy)

bloodhound-python -u user -p password -d domain.local -ns 10.10.10.1 -c DCOnly

With hash authentication

bloodhound-python -u user --hashes :NT_HASH -d domain.local -ns 10.10.10.1 -c All

Collection Methods

DCOnly — LDAP only (least noisy, fastest)

bloodhound-python -u user -p pass -d domain.local -ns DC_IP -c DCOnly

Default — LDAP + session enumeration

bloodhound-python -u user -p pass -d domain.local -ns DC_IP -c Default

All — everything

bloodhound-python -u user -p pass -d domain.local -ns DC_IP -c All

Specific collections: Group, LocalAdmin, Session, Trusts, Default, DCOnly, DCOM, RDP, PSRemote, LoggedOn

bloodhound-python -u user -p pass -d domain.local -ns DC_IP -c Group,Session,Trusts

Options

Specify output directory

bloodhound-python -u user -p pass -d domain.local -ns DC_IP -c All --zip -o /tmp/bh/

ZIP output (for easy import)

bloodhound-python -u user -p pass -d domain.local -ns DC_IP -c All --zip

LDAPS instead of LDAP

bloodhound-python -u user -p pass -d domain.local -ns DC_IP -c DCOnly --ldap-port 636
# Kerberos authentication (with TGT)
export KRB5CCNAME=user.ccache
bloodhound-python -u user -k -d domain.local -ns DC_IP -c All --no-pass

Specify domain controller explicitly

bloodhound-python -u user -p pass -d domain.local -ns DC_IP -dc DC01.domain.local -c All

Importing to BloodHound

# Start BloodHound
sudo neo4j start
bloodhound &

# Upload JSON files via UI:
# Click Upload Data → select all .json files (or .zip)

# Files created:
# users.json, groups.json, computers.json, 
# sessions.json, ous.json, trusts.json, gpos.json

Tips

  • bloodhound-python may miss some data that SharpHound captures (Windows-specific APIs)
  • Use -c DCOnly for lowest noise — gets most useful data (group memberships, ACLs)
  • If session enumeration fails, try -c DCOnly,Group,Trusts for core AD structure
  • The --zip flag creates a single archive ready for BloodHound import
  • For Kerberos auth (PTT): set KRB5CCNAME and use -k --no-pass
Help / Man page
bloodhound-python [options]

-u USER     Username
-p PASS     Password
-H HASH     NT hash (LM:NT or :NT)
-k          Kerberos authentication
-d DOMAIN   Domain name (FQDN)
-ns DNS     Name server (DC IP)
-dc DC      Domain controller hostname
-c COLL     Collection methods (All, DCOnly, Default, ...)
-o DIR      Output directory
--zip       Create zip file
--no-pass   No password (use with -k)

Vue d’ensemble

bloodhound.py est une alternative Python à SharpHound pour collecter les données BloodHound depuis Active Directory. Il tourne sous Linux/macOS et ne nécessite que des identifiants AD valides : essentiel pour les pentests où vous n’avez pas d’accès Windows ou ne pouvez pas exécuter d’exécutables sur les cibles Windows.

Installation

pip3 install bloodhound
# ou
sudo apt install bloodhound.py

Utilisation de base

# Collecte complète
bloodhound-python -u user -p password -d domain.local -ns 10.10.10.1 -c All

# Collecte DCOnly (moins bruyante)
bloodhound-python -u user -p password -d domain.local -ns 10.10.10.1 -c DCOnly

# Avec authentification par empreinte
bloodhound-python -u user --hashes :NT_HASH -d domain.local -ns 10.10.10.1 -c All

Méthodes de collecte

# DCOnly : LDAP uniquement (le moins bruyant, le plus rapide)
bloodhound-python -u user -p pass -d domain.local -ns DC_IP -c DCOnly

# Default : LDAP + énumération des sessions
bloodhound-python -u user -p pass -d domain.local -ns DC_IP -c Default

# All : tout
bloodhound-python -u user -p pass -d domain.local -ns DC_IP -c All

# Collectes spécifiques : Group, LocalAdmin, Session, Trusts, Default, DCOnly, DCOM, RDP, PSRemote, LoggedOn
bloodhound-python -u user -p pass -d domain.local -ns DC_IP -c Group,Session,Trusts

Options

# Spécifier le répertoire de sortie
bloodhound-python -u user -p pass -d domain.local -ns DC_IP -c All --zip -o /tmp/bh/

# Sortie ZIP (pour un import facile)
bloodhound-python -u user -p pass -d domain.local -ns DC_IP -c All --zip

# LDAPS au lieu de LDAP
bloodhound-python -u user -p pass -d domain.local -ns DC_IP -c DCOnly --ldap-port 636

# Authentification Kerberos (avec TGT)
export KRB5CCNAME=user.ccache
bloodhound-python -u user -k -d domain.local -ns DC_IP -c All --no-pass

# Spécifier explicitement le contrôleur de domaine
bloodhound-python -u user -p pass -d domain.local -ns DC_IP -dc DC01.domain.local -c All

Import dans BloodHound

# Démarrer BloodHound
sudo neo4j start
bloodhound &

# Uploader les fichiers JSON via l'UI :
# Cliquer sur Upload Data → sélectionner tous les fichiers .json (ou le .zip)

# Fichiers créés :
# users.json, groups.json, computers.json, 
# sessions.json, ous.json, trusts.json, gpos.json

Conseils

  • bloodhound-python peut rater certaines données que SharpHound capture (APIs propres à Windows)
  • Utilisez -c DCOnly pour le moins de bruit : il récupère les données les plus utiles (appartenances de groupe, ACL)
  • Si l’énumération des sessions échoue, essayez -c DCOnly,Group,Trusts pour la structure AD de base
  • Le flag --zip crée une archive unique prête pour l’import BloodHound
  • Pour l’authentification Kerberos (PTT) : définissez KRB5CCNAME et utilisez -k --no-pass
Aide / Page de manuel
bloodhound-python [options]

-u USER     Username
-p PASS     Password
-H HASH     NT hash (LM:NT or :NT)
-k          Kerberos authentication
-d DOMAIN   Domain name (FQDN)
-ns DNS     Name server (DC IP)
-dc DC      Domain controller hostname
-c COLL     Collection methods (All, DCOnly, Default, ...)
-o DIR      Output directory
--zip       Create zip file
--no-pass   No password (use with -k)