AdPeek
AdPeek is a small Python tool for extracting useful information from Active Directory over LDAP. It focuses on fast enumeration and identifying misconfigured ACL paths without requiring a database or GUI (Poor man's bloodhound-ce).
Current version: v0.1.2
Why AdPeek?
AdPeek is built for operators who want quick, effective AD intelligence without dragging around heavy tooling. It delivers the essentials:
Fast LDAP enumeration of users, machines, SPNs, and AS-REP roastables
Direct ACL checks that show escalation paths like WriteDACL, WriteOwner, password-reset rights, RBCD, and Shadow Credentials
Inbound/outbound access checks to show who a target can control and who can control them
Output that’s short and immediately useful
AdPeek aims to keep things simple.
Features
- Enumerate domain users
- Enumerate domain machines
- List SPN users (Kerberoastable)
- List AS-REP roastable users
- Check group membership
- Identify interesting ACL-based privilege paths (WriteProperty, WriteOwner, WriteDACL, AllExtendedRights, etc.)
Output is minimal and designed for quick consumption during reconnaissance.
Installation
Using pipx (recommended)
pipx installs AdPeek in an isolated environment and exposes the adpeek command globally.
pipx install adpeek-cli
After installation, run:
adpeek --help
Using pip (not recommended, works too)
python3 -m pip install --user adpeek-cli
Make sure ~/.local/bin is on your PATH:
export PATH="$HOME/.local/bin:$PATH"
Upgrade to the latest version
pipx upgrade adpeek-cli
or:
python3 -m pip install --upgrade adpeek-cli
Uninstall
pipx uninstall adpeek-cli
or:
python3 -m pip uninstall adpeek-cli
Usage
./adpeek.py <command> [options]
Options:
-dc <domain controller IP>
-d <domain>
-u <username>
-p <password>
-tu <target user> (for commands that require one)
Run the tool without arguments to display the command list.
Examples
Enumerating domain users
$ ./adpeek.py enumdomusers -dc 10.10.10.10 -u AC001 -p Password123 -d xundeadbeef.local
AdPeek v0.0.1dev - Made by 0xUnd3adBeef
Enumerating domain users...
[ + ] - XUNDEADBEEF\Administrator - "CN=Administrator,CN=Users,DC=xundeadbeef,DC=local" - S-1-5-21-1000-1000-1000-500 - Enabled
[ - ] - XUNDEADBEEF\Guest - "CN=Guest,CN=Users,DC=xundeadbeef,DC=local" - S-1-5-21-1000-1000-1000-501 - Disabled
[ - ] - XUNDEADBEEF\krbtgt - "CN=krbtgt,CN=Users,DC=xundeadbeef,DC=local" - S-1-5-21-1000-1000-1000-502 - Disabled
[ + ] - XUNDEADBEEF\AC001 - "CN=AC001,OU=Finance,OU=Corp,DC=xundeadbeef,DC=local" - S-1-5-21-1000-1000-1000-1716 - Enabled
[ + ] - XUNDEADBEEF\BR214 - "CN=BR214,OU=Finance,OU=Corp,DC=xundeadbeef,DC=local" - S-1-5-21-1000-1000-1000-1717 - Enabled
[ + ] - XUNDEADBEEF\CT059 - "CN=CT059,CN=Users,DC=xundeadbeef,DC=local" - S-1-5-21-1000-1000-1000-4611 - Enabled
Enumerating domain machines
$ ./adpeek.py enumdommachines -dc 10.10.10.10 -u AC001 -p Password123 -d xundeadbeef.local
AdPeek v0.0.1dev - Made by 0xUnd3adBeef
Enumerating domain machines...
[ + ] - XUNDEADBEEF\DC01$ - "CN=DC01,OU=Domain Controllers,DC=xundeadbeef,DC=local" - S-1-5-21-1000-1000-1000-1000
[ + ] - XUNDEADBEEF\SQL01$ - "CN=SQL01,CN=Computers,DC=xundeadbeef,DC=local" - S-1-5-21-1000-1000-1000-1103
[ + ] - XUNDEADBEEF\WS-LAPTOP$ - "CN=WS-LAPTOP,CN=Computers,DC=xundeadbeef,DC=local" - S-1-5-21-1000-1000-1000-1104
[ + ] - XUNDEADBEEF\DEV-SRV01$ - "CN=DEV-SRV01,CN=Computers,DC=xundeadbeef,DC=local" - S-1-5-21-1000-1000-1000-1105
Checking group membership
Regular user
$ ./adpeek.py checkgroup -tu CT059 -dc 10.10.10.10 -u AC001 -p Password123 -d xundeadbeef.local
Checking groups for (CT059)
[ - ] - XUNDEADBEEF\CT059 - "CN=CT059,CN=Users,DC=xundeadbeef,DC=local" - S-1-5-21-1000-1000-1000-4611
-> None
Administrator
$ ./adpeek.py checkgroup -tu Administrator -dc 10.10.10.10 -u AC001 -p Password123 -d xundeadbeef.local
[ + ] - XUNDEADBEEF\Administrator - "CN=Administrator,CN=Users,DC=xundeadbeef,DC=local" - S-1-5-21-1000-1000-1000-500
-> Group Policy Creator Owners
-> Domain Admins
-> Enterprise Admins
-> Schema Admins
-> Administrators
Finding interesting ACL rights
$ ./adpeek.py findinterestingacl -tu CT059 -dc 10.10.10.10 -u AC001 -p Password123 -d xundeadbeef.local
AdPeek v0.0.1dev - Made by 0xUnd3adBeef
Finding interesting ACL-based rights for target user (including group-based)...
[ * ] Target user: XUNDEADBEEF\CT059
DN : CN=CT059,CN=Users,DC=xundeadbeef,DC=local
SIDs considered (user + groups): 1
[ * ] Scanning DACLs for ACEs involving these SIDs...
=== Interesting ACL rights for XUNDEADBEEF\CT059 ===
CT059 -> AllExtendedRights -> CN=Administrator,CN=Users,DC=xundeadbeef,DC=local
CT059 -> WriteProperty -> CN=Administrator,CN=Users,DC=xundeadbeef,DC=local
CT059 -> WRITE_DAC -> CN=Administrator,CN=Users,DC=xundeadbeef,DC=local
CT059 -> WRITE_OWNER -> CN=Administrator,CN=Users,DC=xundeadbeef,DC=local
SPN Users
$ ./adpeek.py enumspnusers -dc 10.10.10.10 -u AC001 -p Password123 -d xundeadbeef.local
Enumerating SPN users...
[ + ] XUNDEADBEEF\SQL02 - CN=SQL02,OU=Servers,DC=xundeadbeef,DC=local
SPN: MSSQLSvc/sql02.xundeadbeef.local:1433
[ + ] XUNDEADBEEF\WEBAPP - CN=WEBAPP,OU=Servers,DC=xundeadbeef,DC=local
SPN: HTTP/webapp.xundeadbeef.local
AS-REP Roastable Users
$ ./adpeek.py enumasreproastusers -dc 10.10.10.10 -u AC001 -p Password123 -d xundeadbeef.local
Enumerating AS-REP roastable users...
[ + ] XUNDEADBEEF\SRVBACKUP - CN=SRVBACKUP,OU=Service,DC=xundeadbeef,DC=local
(DONT_REQ_PREAUTH set)
Notes
- AdPeek is in active development.
- Output formats may change as functionality expands.
- Intended for testing environments and research.
Author
Created by 0xUnd3adBeef If it breaks, you get to keep both pieces.
Metadata
Release files for adpeek-cli 0.1.2
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 | |
|---|---|---|---|---|
| adpeek_cli-0.1.2.tar.gz | 15.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| adpeek_cli-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 29.3 kB
Release files / adpeek_cli-0.1.2.tar.gz
| Download URL | adpeek_cli-0.1.2.tar.gz |
|---|---|
| Size | 15.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4b99a83e9811f73d6391a049e7db125e9c7f865eaffc1e128372330a90648ba8
|
|
BLAKE2b-256 checksum How to use checksums |
529e4ef2286fc6f30d568d6b1b763f88227b48811c202afd79b62033dd5df309
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / adpeek_cli-0.1.2-py3-none-any.whl
| Download URL | adpeek_cli-0.1.2-py3-none-any.whl |
|---|---|
| Size | 14.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2a68b8ee94962b3e9835df846ea1b02ed56fd8d339f511055f79cbd22839e7d6
|
|
BLAKE2b-256 checksum How to use checksums |
2493181328e632a4c309da08a0df01ec2ed57e19c5fc2b571dba09154c38d5aa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Security for adpeek-cli 0.1.2
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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.