
Implémentation en Python3 d'ADRecon avec prise en charge de l'authentification NTLM et Kerberos pour interroger LDAP. Génère des fichiers CSV individuels et un rapport unique XSLX + HTML sur votre domaine AD.
Implémentation Python3 d'un ADRecon amélioré pour les testeurs d'intrusion et les équipes bleues.
ADRecon est un outil qui collecte des informations sur MS Active Directory et génère un rapport XLSX pour fournir une image holistique de l'état actuel de l'environnement AD cible.
[!TIP] Si vous êtes une équipe rouge, vous pouvez plutôt consulter ADRecon-ADWS.
# stable release from pypi
pipx install pyadrecon
# latest commit from github
pipx install git+https://github.com/l4rm4nd/PyADRecon
Ensuite vérifiez l'installation :
pyadrecon --version
[!TIP] Pour Windows, lisez ceci. NTLM + Kerberos pris en charge.
usage: pyadrecon.py [-h] [--version] [--generate-excel-from CSV_DIR] [-dc DOMAIN_CONTROLLER] [-u USERNAME] [-p [PASSWORD]] [-d DOMAIN] [--auth {ntlm,kerberos}] [--tgt-file TGT_FILE] [--tgt-base64 TGT_BASE64]
[--ssl] [--port PORT] [-o OUTPUT] [--page-size PAGE_SIZE] [--threads THREADS] [--dormant-days DORMANT_DAYS] [--password-age PASSWORD_AGE] [--only-enabled] [--collect COLLECT]
[--no-excel] [-v]
PyADRecon - Python Active Directory Reconnaissance Tool
options:
-h, --help show this help message and exit
--version show program's version number and exit
--generate-excel-from CSV_DIR
Generate Excel report from CSV directory (standalone mode, no AD connection needed)
--generate-dashboard-from CSV_DIR
Generate HTML dashboard from existing CSV files (standalone mode)
-dc, --domain-controller DOMAIN_CONTROLLER
Domain Controller IP or hostname
-u, --username USERNAME
Username for authentication
-p, --password [PASSWORD]
Password for authentication (optional if using TGT)
-d, --domain DOMAIN Domain name (e.g., DOMAIN.LOCAL) - Required for Kerberos auth
--auth {ntlm,kerberos}
Authentication method (default: ntlm)
--tgt-file TGT_FILE Path to Kerberos TGT ccache file (for Kerberos auth)
--tgt-base64 TGT_BASE64
Base64-encoded Kerberos TGT ccache (for Kerberos auth)
--ssl Force SSL/TLS (LDAPS). No LDAP fallback allowed.
--port PORT LDAP port (default: 389, use 636 for LDAPS)
-o, --output OUTPUT Output directory (default: PyADRecon-Report-<timestamp>)
--page-size PAGE_SIZE
LDAP page size (default: 500)
--dormant-days DORMANT_DAYS
Days for dormant account threshold (default: 90)
--password-age PASSWORD_AGE
Days for password age threshold (default: 180)
--only-enabled Only collect enabled objects
--collect COLLECT Comma-separated modules to collect (default: all)
--workstation WORKSTATION
Explicitly spoof workstation name for NTLM authentication (default: empty string, bypasses userWorkstations restrictions)
--no-excel Skip Excel report generation
--no-dashboard Skip interactive HTML dashboard generation
-v, --verbose Verbose output
Examples:
# Basic usage with NTLM authentication
pyadrecon.py -dc 192.168.1.1 -u admin -p password123 -d DOMAIN.LOCAL
# With Kerberos authentication (bypasses channel binding)
pyadrecon.py -dc dc01.domain.local -u admin -p password123 -d DOMAIN.LOCAL --auth kerberos
# With Kerberos using TGT from file (bypasses channel binding)
pyadrecon.py -dc dc01.domain.local -u admin -d DOMAIN.LOCAL --auth kerberos --tgt-file /tmp/admin.ccache
# With Kerberos using TGT from base64 string (bypasses channel binding)
pyadrecon.py -dc dc01.domain.local -u admin -d DOMAIN.LOCAL --auth kerberos --tgt-base64 BQQAAAw...
# Only collect specific modules
pyadrecon.py -dc 192.168.1.1 -u admin -p pass -d DOMAIN.LOCAL --collect users,groups,computers
# Output to specific directory
pyadrecon.py -dc 192.168.1.1 -u admin -p pass -d DOMAIN.LOCAL -o /tmp/adrecon_output
# Generate Excel report from existing CSV files (standalone mode)
pyadrecon.py --generate-excel-from /path/to/CSV-Files -o report.xlsx
[!TIP] PyADRecon essaie toujours LDAPS sur TCP/636 en premier.
Si le drapeau
--ssln'est pas utilisé, LDAP sur TCP/389 peut être essayé en secours.
[!WARNING] Si la liaison de canal LDAP est activée, ce script échouera avec
automatic bind not successful - strongerAuthRequired, car ldap3 ne la prend pas en charge (voir ici). Vous devez utiliser l'authentification Kerberos à la place.Si vous utilisez Kerberos sous Linux, veuillez créer un
/etc/krb5.confvalide et une entrée de nom d'hôte du contrôleur de domaine dans/etc/hosts. Lisez ceci. Si vous êtes sur Windows, assurez-vous d'avoir des tickets Kerberos valides. Lisez ceci. Notez que vous pouvez fournir un ticket TGT existant au script via--tgt-fileou--tgt-base64. Par exemple, obtenu par Netexec vianetexec smb <TARGET> <ARGS> --generate-tgt <FILEMAME>.
Il existe également une image Docker disponible sur GHCR.IO.
docker run --rm -v /etc/krb5.conf:/etc/krb5.conf:ro -v /etc/hosts:/etc/hosts:ro -v ./:/tmp/pyadrecon_output ghcr.io/l4rm4nd/pyadrecon:latest -dc dc01.domain.local -u admin -p password123 -d DOMAIN.LOCAL -o /tmp/pyadrecon_output
Par défaut, PyADRecon exécute tous les modules de collecte. Ils sont référencés comme default ou all.
Cependant, vous pouvez librement sélectionner votre propre ensemble de modules à exécuter :
| Icon | Meaning |
|---|---|
| 🛑 | Nécessite des privilèges d'administrateur du domaine (par ex. Admins du domaine) |
| ✅ | Nécessite des privilèges de domaine normaux (par ex. Utilisateurs authentifiés) |
| 💥 | Nouveau module de collecte en version bêta. Les résultats peuvent être incorrects. |
Forest & Domain
forest ✅domain ✅trusts ✅sites ✅subnets ✅schema or schemahistory ✅Domain Controllers
dcs or domaincontrollers ✅Users & Groups
users ✅userspns ✅groups ✅groupmembers ✅protectedgroups ✅💥krbtgt ✅asreproastable ✅kerberoastable ✅Computers & Printers
computers ✅computerspns ✅printers ✅OUs & Group Policy
ous ✅gpos ✅gplinks ✅Passwords & Credentials
passwordpolicy ✅fgpp or finegrainedpasswordpolicy 🛑laps 🛑bitlocker 🛑💥Managed Service Accounts
gmsa or groupmanagedserviceaccounts ✅💥dmsa or delegatedmanagedserviceaccounts ✅💥
Certificates
adcs or certificates ✅💥
DNS
dnszones ✅dnsrecords ✅PyADRecon génère automatiquement un tableau de bord HTML contenant les statistiques clés et les constats de sécurité lorsque tous les modules de collecte sont exécutés.
Si nécessaire, vous pouvez désactiver la création du tableau de bord lors de la collecte initiale des données en utilisant --no-dashboard. Le tableau de bord peut ensuite être généré à partir de fichiers CSV existants avec --generate-dashboard-from <CSV_DIR>.
[!CAUTION] Il s'agit d'une fonctionnalité bêta. Les données affichées peuvent être mal interprétées ou signalées comme problème. Prenez cela avec des pincettes !
Un grand merci aux personnes suivantes :
PyADRecon est publié sous la licence MIT.
Les bibliothèques tierces suivantes sont utilisées :
| Bibliothèque | Licence |
|---|---|
| ldap3 | LGPL v3 |
| openpyxl | MIT |
| gssapi | MIT |
| impacket | Apache 2.0 |
| winkerberos |
Veuillez vous référer aux licences respectives de ces bibliothèques lors de l'utilisation ou de la redistribution de ce logiciel.
| Apache 2.0 |