RustHound — BloodHound Collector (Rust)
What is RustHound?
RustHound is a Rust BloodHound data collector — runs on Linux, Windows, and macOS without Python or a domain-joined shell. Outputs JSON (or ZIP) for import into BloodHound.
| Binary | BloodHound version | Repo |
|---|---|---|
rusthound | Legacy BloodHound (Neo4j GUI) | NH-RED-TEAM/RustHound |
rusthound-ce | BloodHound CE (Community Edition) | g0h4n/RustHound-CE |
OSCP use: Same role as bloodhound-python or SharpHound — collect AD data from Kali with domain creds → import ZIP → find path to Domain Admin in Bloodhound + Sharphound.
Sync time first: Time Sync — Kerberos auth fails with clock skew.
Install
# Prebuilt binaries — GitHub releases (recommended for labs)
# rusthound / rusthound-ce from repos above
# Cargo install (legacy)
cargo install rusthound
# Kali — bloodhound-python often already installed; rusthound is optional
which rusthound rusthound-ce📌 1) Global Arguments
Both tools share similar flags:
| Flag | Description |
|---|---|
-d, --domain <DOMAIN> | Required — domain FQDN (e.g. corp.local) |
-u, --ldapusername | User — format user@domain.local |
-p, --ldappassword | Password (omit to prompt) |
-f, --ldapfqdn | DC hostname (DC01 or DC01.corp.local) |
-i, --ldapip | DC IP address |
-P, --ldapport | LDAP port (default 389) |
-n, --name-server | DNS server IP (usually DC IP) |
-o, --output | Output directory (default ./) |
-z, --zip | Compress JSON into ZIP for BloodHound import |
--ldaps | Force LDAPS (port 636) |
--dns-tcp | DNS over TCP (UDP blocked) |
-k, --kerberos | Kerberos auth from ccache (KRB5CCNAME) — rusthound-ce |
--fqdn-resolver | Resolve computer names to IPs (full collection) |
rusthound (legacy) only:
| Flag | Description |
|---|---|
--dc-only | LDAP only — no SMB/HTTP to member hosts (stealth) |
--adcs | Collect AD CS / certificate template data |
--old-bloodhound | ADCS output for legacy BloodHound format |
rusthound-ce only:
| Flag | Description |
|---|---|
-c, --collectionmethod | All (LDAP+SMB+HTTP) or DCOnly (LDAP only) |
📌 2) Basic Collection (OSCP)
rusthound-ce → BloodHound CE
# Password auth — full collection + ZIP
rusthound-ce -d corp.local -u jsmith@corp.local -p 'Password1' \
-i 10.10.10.10 -o ./rusthound-out -z
# Stealth — LDAP only (no SMB to workstations)
rusthound-ce -d corp.local -u jsmith@corp.local -p 'Password1' \
-i 10.10.10.10 -c DCOnly -o ./out -z
# LDAPS
rusthound-ce -d corp.local --ldaps -u jsmith@corp.local -p 'Password1' \
-i 10.10.10.10 -o ./out -zrusthound → BloodHound Legacy
rusthound -d corp.local -u jsmith@corp.local -p 'Password1' \
-i 10.10.10.10 -o ./rusthound-out -z
# Stealth LDAP-only
rusthound -d corp.local -u jsmith@corp.local -p 'Password1' \
-i 10.10.10.10 --dc-only -o ./out -z
# Include AD CS data (ESC paths in graph)
rusthound -d corp.local -u jsmith@corp.local -p 'Password1' \
-i 10.10.10.10 --adcs -o ./out -zImport ZIP → Bloodhound + Sharphound → Shortest Paths to Domain Admins.
📌 3) Kerberos Authentication
After obtaining a TGT (e.g. impacket-getTGT):
export KRB5CCNAME=/path/to/user.ccache
sudo timedatectl set-ntp false
sudo ntpdate -s 10.10.10.10 # required
rusthound-ce -d corp.local -k -i 10.10.10.10 -o ./out -zPair with Impacket getTGT, Rubeus, or cracked creds → ticket → collect without password on wire.
📌 4) Windows On-Box
Single binary — no .NET / PowerShell needed:
rusthound.exe -d corp.local -u jsmith@corp.local -p Password1 -i 10.10.10.10 -o C:\Temp\ -zAlternative on Windows: SharpHound (official) or Invoke-BloodHound in-memory.
📌 5) Collector Comparison
| Tool | Platform | BloodHound | Notes |
|---|---|---|---|
| SharpHound | Windows | Legacy + CE | Official; in-memory PS1 option |
| bloodhound-python | Linux (Python) | Legacy + CE | pip install bloodhound; very common on Kali |
| rusthound / rusthound-ce | Linux/Win/macOS (Rust) | Legacy / CE respectively | Fast, single binary; ADCS on legacy rusthound |
bloodyAD get bloodhound | Linux (Python) | CE only | Basic collector; see bloodyAD |
| ldapsearch | Linux | — | Raw LDAP; no graph |
When to pick RustHound:
- Want a static binary (no pip/Python deps)
- bloodhound-python broken or slow in lab
- Need ADCS collection on legacy BloodHound (
--adcs) - Collect from Windows without SharpHound.exe
📌 6) Troubleshooting
| Problem | Fix |
|---|---|
| Auth fails, good creds | Time Sync — timedatectl set-ntp false then ntpdate -s DC_IP |
| DNS resolution fails | -i DC_IP -n DC_IP in /etc/hosts: 10.10.10.10 dc.corp.local corp.local |
| LDAPS cert errors | Try without --ldaps first |
| Empty / incomplete graph | Use -c All or drop --dc-only; add --fqdn-resolver |
| Wrong BloodHound version | rusthound = Legacy · rusthound-ce = CE |
📌 Quick Cheat Sheet
# OSCP default — CE
rusthound-ce -d corp.local -u user@corp.local -p 'pass' -i DC_IP -o /tmp/bh -z
# Legacy BloodHound + ADCS
rusthound -d corp.local -u user@corp.local -p 'pass' -i DC_IP --adcs -o /tmp/bh -z
# Stealth
rusthound-ce -d corp.local -u user@corp.local -p 'pass' -i DC_IP -c DCOnly -z