Skip to main content

DACLhound

DACLhound collects Active Directory security descriptors over LDAP and turns the results into a graph you can inspect in a browser. The collector uses bloodyAD as a Python library; it does not run the bloodyAD command.

Install

Python 3.10 or newer is required.

pipx install DACLhound

Upgrade later with:

pipx upgrade DACLhound

Collect a graph

DACLhound.py collect --host "$FQDN" -d "$DOMAIN" -u 'user' -p 'password' --dc-ip "$IP" --output "$DOMAIN.json"

The collector is read-only. By default it collects users, groups, computers, OUs, containers, GPOs, the domain, and ADCS data. Use --types to limit directory object types:

DACLhound.py collect --host "$FQDN" -d "$DOMAIN" -u 'user' -p 'password' --types users,groups --output users-and-groups.json

Use --no-adcs to skip ADCS collection. The normalized graph is written to --output. Add --raw-output to keep the bloodyAD response as well.

Authentication

NTLM password

DACLhound.py collect --host "$FQDN" -d "$DOMAIN" -u 'user' -p 'password' --dc-ip "$IP" -o "$DOMAIN.json"

NTLM pass-the-hash

Use LMHASH:NTHASH; if you only have the NT hash, leave the LM field empty:

DACLhound.py collect --host "$FQDN" -d "$DOMAIN" -u 'user' -hashes ':<NTHASH>' --dc-ip "$IP" -o "$DOMAIN.json"

Kerberos

Use the current KRB5CCNAME, or pass a ccache path to -k:

DACLhound.py collect --host "$FQDN" -d "$DOMAIN" -u 'user' -k --dc-ip "$IP" -o "$DOMAIN.json"
DACLhound.py collect --host "$FQDN" -d "$DOMAIN" -u 'user' -k user.ccache --dc-ip "$IP" -o "$DOMAIN.json"

Kerberos can also use a password or NT hash with -k. For an AES key, use -aesKey <AESKEY>. Add -s to use LDAPS.

Open the graph

Run the viewer in the foreground and stop it with Ctrl+C:

DACLhound.py graph --input "$DOMAIN.json"

Or run it in the background:

DACLhound.py graph start --input "$DOMAIN.json"
DACLhound.py graph status
DACLhound.py graph stop

The server listens on 127.0.0.1:8765 by default. Uploaded JSON files stay in memory while the server is running and are discarded when it stops. Use --bind and --port to change the listener. Run DACLhound.py collect --help or DACLhound.py graph --help for all options.

License

MIT. See LICENSE.

Metadata

Release files for DACLhound 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for DACLhound 0.1.0
File Size Uploaded Provenance
daclhound-0.1.0.tar.gz 75.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for DACLhound 0.1.0
File Interpreter ABI Platform
daclhound-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 150.7 kB

Release files / daclhound-0.1.0.tar.gz

Download URL daclhound-0.1.0.tar.gz
Size 75.0 kB
Tags Source
SHA-256 checksum
How to use checksums
ba65a73789ac515a7a051b31feca45ac6ab18d7caac10d96caafbe674536dda7
BLAKE2b-256 checksum
How to use checksums
296df4673603075d348248a305ce433ae23dfd170618352673d8c132a453e531
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.18

Release files / daclhound-0.1.0-py3-none-any.whl

Download URL daclhound-0.1.0-py3-none-any.whl
Size 75.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
581c1388ff1cd31ac6a8b46674e57843c96c402c9acdb53195bcb1dc28248dc3
BLAKE2b-256 checksum
How to use checksums
3df13f687179ee0b0b262b52b2dfda9822e4b79cbdb64d3762097741d6844e6a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.18

Security for DACLhound 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page