
Eine interaktive Kommandozeilen-Shell für die BloodHound-API.
Eine interaktive Kommandozeilen-Shell für BloodHound. Schlage Active-Directory-Objekte nach, suche nach Schwachstellen und finde Angriffspfade vom Terminal aus, ohne die Web-Oberfläche zu öffnen.
Erfordert Python 3.11+ und einen BloodHound CE v9-Server (getestet mit 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
Dieselben Befehle laufen nicht-interaktiv für Skripting: bhshell -c "hunt --json" > hunt.json.
| Befehl | Zeigt |
|---|---|
user, computer, group, lookup | Kerberoastbare / AS-REP-roastbare Objekte, Delegierung, Passwortalter, Tier-Zero- und Owned-Flags sowie Gruppenverschachtelung, eingehende/ausgehende ACL-Kontrolle, Sitzungen und lokale Adminrechte |
ou | OUs, Container und ganze Domänen: der OU-Baum mit Objekt-, Tier-Zero- und Owned-Zählungen, jedes Objekt unterhalb einer OU, die anwendbaren GPOs (erzwungene Verknüpfungen, blockierte Vererbung) und wer außerhalb von Tier Zero sie bearbeiten kann, sowie wer die OU kontrolliert; user/computer -G zeigt die auf ein einzelnes Objekt angewendeten GPOs. Gleichnamige OUs werden über den distinguished name ausgewählt |
gpo | Wo eine GPO verknüpft ist, auf welche Benutzer und Computer sie angewendet wird (unter Berücksichtigung blockierter Vererbung und erzwungener Verknüpfungen) und wer außerhalb von Tier Zero sie bearbeiten kann |
ca, template | Enterprise-CAs und Zertifikatsvorlagen: die ESC-Bedingungen, die eine Vorlage erfüllt (einschließlich ESC2 und ESC15, für die BloodHound keine Edge hat), den Host und die Einstellungen der CA (ESC6, ESC8) und wer sie enrollen, verwalten (ESC7) oder umschreiben (ESC4) kann |
search | Objekte, die Eigenschaftsfiltern entsprechen (search -t user hasspn enabled), mit Datumsangaben, Altersangaben (90d) und Wildcards |
path | Kürzeste Pfade zu einem Ziel oder zu Tier Zero, von allem Owned oder über --via-Schritte; ausgegeben als Hop-Ketten, Terminal-Graph oder SVG/PNG für Berichte |
hunt | Domänenweite Prüfungen nach Schweregrad: DCSync, Kontrolle über Tier Zero, AD CS (ESC*), Kerberoasting, privilegierte Sitzungen, LAPS/gMSA-Leser, Passwörter in Attributen oder noch auf ihrem Standardwert (Pre-Windows-2000-Computer, ungenutzte Konten, Admin-Konten mit einem Standard-Zwilling), Takeover-Primitive (Shadow Credentials, RBCD), GPO-Kontrolle, NTLM-Relay, Vertrauensstellungen, mögliche Honeytokens...; hunt --owned beschränkt sie auf das, was deine Owned-Objekte tun können |
cypher, query | Rohes Cypher und eine Bibliothek gespeicherter Abfragen: mitgelieferte, deine eigenen .cyp-Dateien (~/.bhshell/queries/ oder ein beliebiger Ordner, der mit config query_dirs festgelegt wird) und die auf dem Server gespeicherten |
owned, hvt | Owned- und Tier-Zero-Objekte markieren oder die Markierung aufheben, nach Namen oder aus einer Datei mit Namen |
domains, trusts | Zählungen pro Domäne und die Vertrauenszuordnung mit Status der SID-Filterung |
Um deine eigene Abfrage hinzuzufügen, speichere sie als .cyp-Datei in ~/.bhshell/queries/ und führe sie nach Namen aus:
$ 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
Siehe Query library für das Format und dafür, wie Abfragen in anderen Ordnern abgelegt werden (ein Team-Repository, ein Ordner pro Engagement).
Die meisten Befehle akzeptieren --json und -o FILE (JSON oder CSV), und diejenigen, die Objekte auflisten, akzeptieren auch
--names-only oder -o FILE.txt für eine einfache Liste von Namen, die an andere Tools übergeben werden kann. Die Anmeldung funktioniert mit einem Passwort (plus MFA) oder
einem API-Token; Geheimnisse werden abgefragt oder aus der Umgebung gelesen, niemals als Argumente übergeben.
Die vollständige Gebrauchsanleitung (jeder Befehl, jedes View-Flag, jeder Suchfilter, jede Pfadoption, jede Hunt-Prüfung und
jede Konfigurationseinstellung) befindet sich in docs/USAGE.md.
Innerhalb der Shell führen Sie help oder help <command> aus.
Fehlerberichte und Pull Requests sind willkommen unter 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
Ohne einen Server führt pytest nur die Offline-Tests aus. Die übrigen laufen gegen eine BloodHound CE-Instanz, die mit den Beispieldaten geladen wurde:
export BHSHELL_TEST_URL=http://127.0.0.1:8080 BH_USER=admin BH_PASSWORD='...'
python -m pytest -m live
Sie lesen nur vom Server und berühren niemals ~/.bhshell.
Vertrieben unter der MIT-Lizenz. Siehe LICENSE für Details.
BloodHound ist eine Marke von SpecterOps. bhshell ist ein unabhängiges Projekt und steht in keiner Verbindung zu SpecterOps und wird von SpecterOps nicht unterstützt.