
Une interface de ligne de commande interactive pour l'API BloodHound.
Un shell interactif en ligne de commande pour BloodHound. Recherchez des objets Active Directory, traquez les faiblesses et trouvez des chemins d'attaque depuis le terminal, sans ouvrir l'interface web.
Nécessite Python 3.11+ et un serveur BloodHound CE v9 (testé sur la v9.7.1).
pipx install bhshell # recommended
# or
pip install bhshell
$ bhshell --url http://127.0.0.1:8080
[bh: shell] > login -u admin
[+] Logged in as admin on 127.0.0.1:8080
[bh: shell] > hunt
Severity Check Count Example Description
critical dcsync 4 [email protected] Non-Tier-Zero principals with replication rights
critical adcs 95 [email protected] AD CS escalation paths (ESC*, GoldenCert)
high kerberoastable 2 [email protected] Kerberoastable users
...
[*] Details: 'hunt CHECK' (e.g. 'hunt dcsync'), or 'hunt --all'.
[bh: shell] > user PHANTOM\svc_kerb_del --all -o svc_kerb_del.csv
[bh: shell] > ou phantom.corp -t
[bh: shell] > computer DF-MS-SHS -G
[bh: shell] > gpo 'ENABLE [email protected]' -c
[bh: shell] > path --owned -g
Les mêmes commandes s'exécutent de manière non interactive pour le scripting : bhshell -c "hunt --json" > hunt.json.
| Commande | Affiche |
|---|---|
user, computer, group, lookup | Kerberoastable / AS-REP roastable, délégation, âge du mot de passe, indicateurs Tier Zero et owned, ainsi que l'imbrication des groupes, le contrôle ACL entrant/sortant, les sessions et les droits d'administrateur local |
ou | OUs, conteneurs et domaines entiers : l'arborescence des OUs avec les compteurs d'objets, Tier Zero et owned, chaque objet sous une OU, les GPO qui s'appliquent (liens appliqués, héritage bloqué) et qui, en dehors de Tier Zero, peut les modifier, et qui contrôle l'OU ; user/computer -G affiche les GPO appliquées à un objet. Les OUs de même nom sont sélectionnées par nom distinctif |
gpo | Où une GPO est liée, les utilisateurs et ordinateurs auxquels elle s'applique (héritage bloqué et liens appliqués pris en compte) et qui, en dehors de Tier Zero, peut la modifier |
ca, template | Les CAs d'entreprise et les modèles de certificats : les conditions ESC qu'un modèle remplit (ESC2 et ESC15 inclus, pour lesquelles BloodHound n'a pas d'arête), l'hôte et les paramètres de la CA (ESC6, ESC8), et qui peut s'enrôler, gérer (ESC7) ou les réécrire (ESC4) |
search | Objets correspondant à des filtres de propriétés (search -t user hasspn enabled), avec dates, âges (90d) et jokers |
path | Chemins les plus courts vers une cible ou vers Tier Zero, depuis tout ce qui est owned, ou via des étapes --via ; affichés sous forme de chaînes de sauts, de graphe terminal, ou en SVG/PNG pour les rapports |
hunt | Vérifications à l'échelle du domaine par sévérité : DCSync, contrôle de Tier Zero, AD CS (ESC*), Kerberoasting, sessions privilégiées, lecteurs LAPS/gMSA, mots de passe dans les attributs ou encore à leur valeur par défaut (ordinateurs pré-Windows 2000, comptes inutilisés, comptes administrateurs avec un jumeau standard), primitives de prise de contrôle (Shadow Credentials, RBCD), contrôle de GPO, relais NTLM, approbations, honeytokens possibles... ; hunt --owned les limite à ce que vos objets owned peuvent faire |
cypher, query | Cypher brut, et une bibliothèque de requêtes enregistrées : fournies, vos propres fichiers .cyp (~/.bhshell/queries/ ou tout dossier défini avec config query_dirs) et celles enregistrées sur le serveur |
owned, hvt | Marquer ou démarquer les objets owned et Tier Zero, par nom ou depuis un fichier de noms |
domains, trusts | Compteurs par domaine, et la carte des approbations avec l'état du filtrage SID |
Pour ajouter votre propre requête, enregistrez-la sous forme de fichier .cyp dans ~/.bhshell/queries/ et exécutez-la par son nom :
$ cat ~/.bhshell/queries/stale-admins.cyp
// description: Enabled adminCount users who have not logged on for a year
MATCH (u:User) WHERE u.admincount = true AND u.enabled = true
AND u.lastlogontimestamp < (datetime().epochseconds - 31536000) RETURN u
[bh: shell] > query run stale-admins -o stale-admins.csv
Voir Query library pour le format et pour conserver les requêtes dans d'autres dossiers (un dépôt d'équipe, un dossier par mission).
La plupart des commandes acceptent --json et -o FILE (JSON ou CSV), et celles qui listent des objets acceptent également
--names-only ou -o FILE.txt pour obtenir une simple liste de noms à transmettre à d'autres outils. La connexion fonctionne avec un mot de passe (plus MFA) ou
un jeton d'API ; les secrets sont demandés interactivement ou lus depuis l'environnement, jamais passés en arguments.
Le guide d'utilisation complet (chaque commande, option d'affichage, filtre de recherche, option de chemin, vérification de hunt et
paramètre de configuration) se trouve dans docs/USAGE.md.
Dans le shell, exécutez help ou help <command>.
Les rapports de bugs et les pull requests sont les bienvenus à l'adresse github.com/kr0no/bloodhound-shell/issues.
git clone https://github.com/kr0no/bloodhound-shell.git
cd bloodhound-shell
python3 -m venv .venv && . .venv/bin/activate
pip install -e '.[dev]'
pre-commit install
python -m pytest
Sans serveur, pytest n'exécute que les tests hors ligne. Les autres s'exécutent contre une instance BloodHound CE
chargée avec les données d'exemple :
export BHSHELL_TEST_URL=http://127.0.0.1:8080 BH_USER=admin BH_PASSWORD='...'
python -m pytest -m live
Ils ne font que lire depuis le serveur et ne touchent jamais à ~/.bhshell.
Distribué sous la licence MIT. Voir LICENSE pour plus de détails.
BloodHound est une marque déposée de SpecterOps. bhshell est un projet indépendant et n'est ni affilié à SpecterOps ni approuvé par celui-ci.