
Python3 реализация ADRecon с поддержкой аутентификации NTLM и Kerberos при запросах к LDAP. Генерирует отдельные CSV-файлы и единый отчет в формате XSLX + HTML о вашем домене AD.
Реализация на Python3 улучшенной версии ADRecon для пентестеров и синих команд.
ADRecon — это инструмент, который собирает информацию об Active Directory от Microsoft и генерирует XSLX-отчет, предоставляющий целостную картину текущего состояния целевой AD-среды.
[!TIP] Если вы участвуете в Red Team, попробуйте ADRecon-ADWS.
# stable release from pypi
pipx install pyadrecon
# latest commit from github
pipx install git+https://github.com/l4rm4nd/PyADRecon
Затем проверьте установку:
pyadrecon --version
[!TIP] Для Windows см. эту страницу. Поддерживаются NTLM и Kerberos.
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 сначала всегда пытается использовать LDAPS через TCP/636.
Если флаг
--sslне используется, в качестве запасного варианта может быть использован LDAP через TCP/389.
[!WARNING] Если включена привязка канала LDAP, скрипт завершится с ошибкой
automatic bind not successful - strongerAuthRequired, так как ldap3 не поддерживает эту функцию (см. здесь). Вместо этого необходимо использовать аутентификацию Kerberos.При использовании аутентификации Kerberos в Linux создайте корректный файл
/etc/krb5.confи запись имени хоста контроллера домена в/etc/hosts. Подробнее здесь. Если вы используете Windows, убедитесь, что у вас есть действительные билеты Kerberos. Подробнее здесь. Обратите внимание, что вы можете передать уже существующий TGT-билет скрипту через--tgt-fileили--tgt-base64. Например, полученный с помощью Netexec черезnetexec smb <TARGET> <ARGS> --generate-tgt <FILEMAME>.
Также доступен образ Docker на 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
По умолчанию PyADRecon запускает все модули сбора. Они обозначаются как default или all.
Однако вы можете выбрать собственный набор модулей для запуска:
| Иконка | Значение |
|---|---|
| 🛑 | Требуются привилегии администратора домена (например, Domain Admins) |
| ✅ | Требуются обычные привилегии домена (например, Authenticated Users) |
| 💥 | Новый модуль сбора в бета-версии. Результаты могут быть некорректными. |
Лес и домен
forest ✅domain ✅trusts ✅sites ✅subnets ✅schema or schemahistory ✅Контроллеры домена
dcs or domaincontrollers ✅Пользователи и группы
users ✅userspns ✅groups ✅groupmembers ✅protectedgroups ✅💥krbtgt ✅asreproastable ✅kerberoastable ✅Компьютеры и принтеры
computers ✅computerspns ✅printers ✅Подразделения и групповая политика
ous ✅gpos ✅gplinks ✅Пароли и учетные данные
passwordpolicy ✅fgpp or finegrainedpasswordpolicy 🛑laps 🛑bitlocker 🛑💥Управляемые учетные записи служб
gmsa or groupmanagedserviceaccounts ✅💥dmsa or delegatedmanagedserviceaccounts ✅💥
Сертификаты
adcs or certificates ✅💥
DNS
dnszones ✅dnsrecords ✅PyADRecon автоматически генерирует HTML-панель управления, содержащую ключевые статистические данные и результаты проверки безопасности, при выполнении всех модулей сбора.
При необходимости создание панели можно отключить во время первоначального сбора данных с помощью --no-dashboard. Панель можно будет создать позже из существующих CSV-файлов с помощью --generate-dashboard-from <CSV_DIR>.
[!CAUTION] Это бета-функция. Отображаемые данные могут быть некорректно обработаны или ошибочно помечены как проблема. Относитесь к ним с осторожностью!
Большое спасибо следующим людям:
PyADRecon выпущен под лицензией MIT.
Используются следующие сторонние библиотеки:
| Библиотека | Лицензия |
|---|---|
| ldap3 | LGPL v3 |
| openpyxl | MIT |
| gssapi | MIT |
| impacket | Apache 2.0 |
| winkerberos |
Пожалуйста, ознакомьтесь с соответствующими лицензиями этих библиотек при использовании или распространении данного программного обеспечения.
| Apache 2.0 |