
Implementación en Python3 de ADRecon con soporte para autenticación NTLM y Kerberos consultando LDAP. Genera archivos CSV individuales y un único informe XSLX + HTML sobre tu dominio AD.
Implementación en Python3 de un ADRecon mejorado para Pentesters y Blue Teams.
ADRecon es una herramienta que recopila información sobre MS Active Directory y genera un informe XSLX para proporcionar una imagen holística del estado actual del entorno AD objetivo.
[!TIP] Si eres un Red Team, puede que quieras revisar ADRecon-ADWS en su lugar.
# versión estable desde pypi
pipx install pyadrecon
# último commit desde github
pipx install git+https://github.com/l4rm4nd/PyADRecon
Luego verifica la instalación:
pyadrecon --version
[!TIP] Para Windows, puedes leer esto. NTLM + Kerberos compatible.
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 - Herramienta de Reconocimiento de Active Directory en Python
options:
-h, --help muestra este mensaje de ayuda y salir
--version muestra el número de versión del programa y salir
--generate-excel-from CSV_DIR
Generar informe Excel desde directorio CSV (modo autónomo, sin necesidad de conexión AD)
--generate-dashboard-from CSV_DIR
Generar panel HTML desde archivos CSV existentes (modo autónomo)
-dc, --domain-controller DOMAIN_CONTROLLER
IP o nombre de host del controlador de dominio
-u, --username USERNAME
Nombre de usuario para autenticación
-p, --password [PASSWORD]
Contraseña para autenticación (opcional si se usa TGT)
-d, --domain DOMAIN Nombre de dominio (ej., DOMAIN.LOCAL) - Requerido para autenticación Kerberos
--auth {ntlm,kerberos}
Método de autenticación (por defecto: ntlm)
--tgt-file TGT_FILE Ruta al archivo ccache TGT de Kerberos (para autenticación Kerberos)
--tgt-base64 TGT_BASE64
Ccache TGT de Kerberos codificado en Base64 (para autenticación Kerberos)
--ssl Forzar SSL/TLS (LDAPS). No se permite fallback LDAP.
--port PORT Puerto LDAP (por defecto: 389, usa 636 para LDAPS)
-o, --output OUTPUT Directorio de salida (por defecto: PyADRecon-Report-<marca de tiempo>)
--page-size PAGE_SIZE
Tamaño de página LDAP (por defecto: 500)
--dormant-days DORMANT_DAYS
Días para el umbral de cuenta inactiva (por defecto: 90)
--password-age PASSWORD_AGE
Días para el umbral de antigüedad de contraseña (por defecto: 180)
--only-enabled Solo recopilar objetos habilitados
--collect COLLECT Módulos separados por comas para recopilar (por defecto: todos)
--workstation WORKSTATION
Suplantar explícitamente nombre de estación de trabajo para autenticación NTLM (por defecto: cadena vacía, omite restricciones de userWorkstations)
--no-excel Omitir generación de informe Excel
--no-dashboard Omitir generación de panel HTML interactivo
-v, --verbose Salida detallada
Ejemplos:
# Uso básico con autenticación NTLM
pyadrecon.py -dc 192.168.1.1 -u admin -p password123 -d DOMAIN.LOCAL
# Con autenticación Kerberos (omite el enlace de canal)
pyadrecon.py -dc dc01.domain.local -u admin -p password123 -d DOMAIN.LOCAL --auth kerberos
# Con Kerberos usando TGT desde archivo (omite el enlace de canal)
pyadrecon.py -dc dc01.domain.local -u admin -d DOMAIN.LOCAL --auth kerberos --tgt-file /tmp/admin.ccache
# Con Kerberos usando TGT desde cadena base64 (omite el enlace de canal)
pyadrecon.py -dc dc01.domain.local -u admin -d DOMAIN.LOCAL --auth kerberos --tgt-base64 BQQAAAw...
# Solo recopilar módulos específicos
pyadrecon.py -dc 192.168.1.1 -u admin -p pass -d DOMAIN.LOCAL --collect users,groups,computers
# Salida a directorio específico
pyadrecon.py -dc 192.168.1.1 -u admin -p pass -d DOMAIN.LOCAL -o /tmp/adrecon_output
# Generar informe Excel desde archivos CSV existentes (modo autónomo)
pyadrecon.py --generate-excel-from /path/to/CSV-Files -o report.xlsx
[!TIP] PyADRecon siempre intenta LDAPS en TCP/636 primero.
Si la bandera
--sslno se usa, se puede intentar LDAP en TCP/389 como fallback.
[!WARNING] Si el enlace de canal LDAP está habilitado, este script fallará con
automatic bind not successful - strongerAuthRequired, ya que ldap3 no lo soporta (ver aquí). Debes usar autenticación Kerberos en su lugar.Si usas autenticación Kerberos en Linux, por favor crea un archivo
/etc/krb5.confválido y una entrada de nombre de host del DC en/etc/hosts. Puedes leer esto. Si estás en Windows, asegúrate de tener tickets Kerberos válidos. Puedes leer esto. Ten en cuenta que puedes proporcionar un ticket TGT ya existente al script mediante--tgt-fileo--tgt-base64. Por ejemplo, obtenido por Netexec mediantenetexec smb <TARGET> <ARGS> --generate-tgt <FILEMAME>.
También hay una imagen Docker disponible en 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
Por defecto, PyADRecon ejecuta todos los módulos de recopilación. Se les hace referencia como default o all.
Sin embargo, puedes seleccionar libremente tu propia colección de módulos para ejecutar:
| Icono | Significado |
|---|---|
| 🛑 | Requiere privilegios administrativos de dominio (ej., Administradores de dominio) |
| ✅ | Requiere privilegios regulares de dominio (ej., Usuarios autenticados) |
| 💥 | Nuevo módulo de recopilación en estado beta. Los resultados pueden ser incorrectos. |
Bosque y Dominio
forest ✅domain ✅trusts ✅sites ✅subnets ✅schema o schemahistory ✅Controladores de dominio
dcs o domaincontrollers ✅Usuarios y Grupos
users ✅userspns ✅groups ✅groupmembers ✅protectedgroups ✅💥krbtgt ✅asreproastable ✅kerberoastable ✅Computadoras e Impresoras
computers ✅computerspns ✅printers ✅OUs y Directivas de Grupo
ous ✅gpos ✅gplinks ✅Contraseñas y Credenciales
passwordpolicy ✅fgpp o finegrainedpasswordpolicy 🛑laps 🛑bitlocker 🛑💥Cuentas de Servicio Administradas
gmsa o groupmanagedserviceaccounts ✅💥dmsa o delegatedmanagedserviceaccounts ✅💥
Certificados
adcs o certificates ✅💥
DNS
dnszones ✅dnsrecords ✅PyADRecon genera automáticamente un panel HTML que contiene estadísticas clave y hallazgos de seguridad cuando se ejecutan todos los módulos de recopilación.
Si es necesario, puedes deshabilitar la creación del panel durante la recopilación inicial de datos usando --no-dashboard. El panel puede generarse posteriormente desde archivos CSV existentes con --generate-dashboard-from <CSV_DIR>.
[!CAUTION] Esta es una función beta. Los datos mostrados pueden ser analizados o reportados incorrectamente como un problema. ¡Tómalo con cautela!
Muchas gracias a las siguientes personas:
PyADRecon se publica bajo la Licencia MIT.
Se utilizan las siguientes bibliotecas de terceros:
| Biblioteca | Licencia |
|---|---|
| ldap3 | LGPL v3 |
| openpyxl | MIT |
| gssapi | MIT |
| impacket | Apache 2.0 |
| winkerberos |
Por favor, consulta las respectivas licencias de estas bibliotecas al usar o redistribuir este software.
| Apache 2.0 |