← retour aux outils back to tools

# 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)