
Implementação em Python3 do ADRecon com suporte para autenticação NTLM e Kerberos consultando LDAP. Gera arquivos CSV individuais e um único relatório XSLX + HTML sobre o seu domínio AD.
Implementação em Python3 de um ADRecon melhorado para Pentesters e Equipas Azuis.
ADRecon é uma ferramenta que recolhe informações sobre o MS Active Directory e gera um relatório XSLX para fornecer uma imagem holística do estado atual do ambiente AD alvo.
[!TIP] Se és uma Equipa Vermelha, podes consultar o ADRecon-ADWS.
# versão estável do pypi
pipx install pyadrecon
# último commit do github
pipx install git+https://github.com/l4rm4nd/PyADRecon
Em seguida, verifica a instalação:
pyadrecon --version
[!TIP] Para Windows, podes ler isto. NTLM + Kerberos suportados.
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 - Ferramenta de Reconhecimento de Active Directory em Python
opções:
-h, --help mostra esta mensagem de ajuda e sai
--version mostra o número da versão do programa e sai
--generate-excel-from CSV_DIR
Gera relatório Excel a partir de diretório CSV (modo autónomo, sem necessidade de conexão AD)
--generate-dashboard-from CSV_DIR
Gera painel HTML a partir de ficheiros CSV existentes (modo autónomo)
-dc, --domain-controller DOMAIN_CONTROLLER
IP ou hostname do Controlador de Domínio
-u, --username USERNAME
Nome de utilizador para autenticação
-p, --password [PASSWORD]
Palavra-passe para autenticação (opcional se usar TGT)
-d, --domain DOMAIN Nome do domínio (ex.: DOMINIO.LOCAL) - Necessário para autenticação Kerberos
--auth {ntlm,kerberos}
Método de autenticação (padrão: ntlm)
--tgt-file TGT_FILE Caminho para o ficheiro ccache do TGT Kerberos (para autenticação Kerberos)
--tgt-base64 TGT_BASE64
TGT Kerberos codificado em Base64 (para autenticação Kerberos)
--ssl Forçar SSL/TLS (LDAPS). Sem fallback para LDAP.
--port PORT Porta LDAP (padrão: 389, usar 636 para LDAPS)
-o, --output OUTPUT Diretório de saída (padrão: PyADRecon-Report-<timestamp>)
--page-size PAGE_SIZE
Tamanho da página LDAP (padrão: 500)
--dormant-days DORMANT_DAYS
Dias para o limiar de contas inativas (padrão: 90)
--password-age PASSWORD_AGE
Dias para o limiar de idade da palavra-passe (padrão: 180)
--only-enabled Recolher apenas objetos ativados
--collect COLLECT Módulos separados por vírgulas para recolher (padrão: todos)
--workstation WORKSTATION
Simular explicitamente o nome da estação de trabalho para autenticação NTLM (padrão: string vazia, ignora restrições userWorkstations)
--no-excel Saltar geração do relatório Excel
--no-dashboard Saltar geração do painel HTML interativo
-v, --verbose Saída verbosa
Exemplos:
# Utilização básica com autenticação NTLM
pyadrecon.py -dc 192.168.1.1 -u admin -p password123 -d DOMINIO.LOCAL
# Com autenticação Kerberos (ignora channel binding)
pyadrecon.py -dc dc01.dominio.local -u admin -p password123 -d DOMINIO.LOCAL --auth kerberos
# Com Kerberus usando TGT de ficheiro (ignora channel binding)
pyadrecon.py -dc dc01.dominio.local -u admin -d DOMINIO.LOCAL --auth kerberos --tgt-file /tmp/admin.ccache
# Com Kerberos usando TGT de string base64 (ignora channel binding)
pyadrecon.py -dc dc01.dominio.local -u admin -d DOMINIO.LOCAL --auth kerberos --tgt-base64 BQQAAAw...
# Recolher apenas módulos específicos
pyadrecon.py -dc 192.168.1.1 -u admin -p pass -d DOMINIO.LOCAL --collect utilizadores,grupos,computadores
# Diretório de saída específico
pyadrecon.py -dc 192.168.1.1 -u admin -p pass -d DOMINIO.LOCAL -o /tmp/adrecon_output
# Gerar relatório Excel a partir de ficheiros CSV existentes (modo autónomo)
pyadrecon.py --generate-excel-from /caminho/para/Ficheiros-CSV -o relatorio.xlsx
[!TIP] PyADRecon tenta sempre LDAPS em TCP/636 primeiro.
Se a flag
--sslnão for usada, pode tentar LDAP em TCP/389 como fallback.
[!WARNING] Se o channel binding LDAP estiver ativado, este script falhará com
automatic bind not successful - strongerAuthRequired, pois o ldap3 não o suporta (ver aqui). Deves usar autenticação Kerberos em vez disso.Se usares autenticação Kerberos no Linux, por favor cria um ficheiro
/etc/krb5.confválido e uma entrada de hostname do DC em/etc/hosts. Podes ler isto. Se estiveres no Windows, certifica-te de que tens tickets Kerberos válidos. Podes ler isto. Nota que podes fornecer um ticket TGT já existente ao script através de--tgt-fileou--tgt-base64. Por exemplo, obtido pelo Netexec vianetexec smb <ALVO> <ARGUMENTOS> --generate-tgt <NOME_FICHEIRO>.
Também está disponível uma imagem Docker no 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.dominio.local -u admin -p password123 -d DOMINIO.LOCAL -o /tmp/pyadrecon_output
Por padrão, o PyADRecon executa todos os módulos de recolha. São referidos como default ou all.
No entanto, podes selecionar livremente a tua própria coleção de módulos para executar:
| Ícone | Significado |
|---|---|
| 🛑 | Requer privilégios administrativos de domínio (ex.: Administradores de Domínio) |
| ✅ | Requer privilégios regulares de domínio (ex.: Utilizadores Autenticados) |
| 💥 | Novo módulo de recolha em estado beta. Os resultados podem estar incorretos. |
Floresta & Domínio
forest ✅domain ✅trusts ✅sites ✅subnets ✅schema ou schemahistory ✅Controladores de Domínio
dcs ou domaincontrollers ✅Utilizadores & Grupos
users ✅userspns ✅groups ✅groupmembers ✅protectedgroups ✅💥krbtgt ✅asreproastable ✅kerberoastable ✅Computadores & Impressoras
computers ✅computerspns ✅printers ✅UOs & Políticas de Grupo
ous ✅gpos ✅gplinks ✅Palavras-passe & Credenciais
passwordpolicy ✅fgpp ou finegrainedpasswordpolicy 🛑laps 🛑bitlocker 🛑💥Contas de Serviço Geridas
gmsa ou groupmanagedserviceaccounts ✅💥dmsa ou delegatedmanagedserviceaccounts ✅💥
Certificados
adcs ou certificates ✅💥
DNS
dnszones ✅dnsrecords ✅O PyADRecon gera automaticamente um painel HTML contendo estatísticas chave e descobertas de segurança quando todos os módulos de recolha são executados.
Se necessário, podes desativar a criação do painel durante a recolha inicial de dados usando --no-dashboard. O painel pode ser gerado posteriormente a partir de ficheiros CSV existentes com --generate-dashboard-from <DIR_CSV>.
[!CAUTION] Esta é uma funcionalidade beta. Os dados apresentados podem ser analisados ou reportados incorretamente como problema. Leva com cautela!
Muitos agradecimentos às seguintes pessoas:
PyADRecon é distribuído sob a Licença MIT.
As seguintes bibliotecas de terceiros são utilizadas:
| Biblioteca | Licença |
|---|---|
| ldap3 | LGPL v3 |
| openpyxl | MIT |
| gssapi | MIT |
| impacket | Apache 2.0 |
| winkerberos |
Por favor, consulte as respetivas licenças destas bibliotecas ao utilizar ou redistribuir este software.
| Apache 2.0 |