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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| daclhound-0.1.0.tar.gz | 75.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.