
Volcador de información de Active Directory mediante LDAP
Volcador de información de Active Directory a través de LDAP
En un dominio de Active Directory, cualquier usuario autenticado (o máquina) puede recuperar mucha información interesante a través de LDAP. Esto convierte a LDAP en un protocolo interesante para recopilar información durante la fase de reconocimiento de un pentest en una red interna. Un problema es que los datos de LDAP a menudo no están disponibles en un formato fácil de leer.
ldapdomaindump es una herramienta que busca resolver este problema, recopilando y analizando la información disponible a través de LDAP y generándola en un formato HTML legible por humanos, así como en archivos JSON y CSV/TSV/grepeables legibles por máquina.
La herramienta fue diseñada con los siguientes objetivos:
La herramienta genera varios archivos que contienen una visión general de los objetos del dominio:
Así como dos archivos agrupados:
Requiere ldap3 > 2.0 y dnspython. ldapdomaindump requiere Python 3.6 o superior.
Las dependencias se pueden instalar manualmente con pip install ldap3 dnspython future, pero en la mayoría de los casos pip las manejará al instalar el paquete principal ya sea desde git o pypi.
El paquete ldapdomaindump se puede instalar con python setup.py install desde el código fuente de git, o para la última versión con pip install ldapdomaindump.
Hay 3 formas de usar la herramienta:
python ldapdomaindump.pypython -m ldapdomaindumpldapdomaindumpSe puede obtener ayuda con el interruptor -h:
usage: ldapdomaindump.py [-h] [-u USERNAME] [-p PASSWORD] [-at {NTLM,SIMPLE}]
[-o DIRECTORY] [--no-html] [--no-json] [--no-grep]
[--grouped-json] [-d DELIMITER] [-r] [-n DNS_SERVER]
[-m]
HOSTNAME
Domain information dumper via LDAP. Dumps users/computers/groups and
OS/membership information to HTML/JSON/greppable output.
Required options:
HOSTNAME Hostname/ip or ldap://host:port connection string to
connect to (use ldaps:// to use SSL)
Main options:
-h, --help show this help message and exit
-u USERNAME, --user USERNAME
DOMAIN\username for authentication, leave empty for
anonymous authentication
-p PASSWORD, --password PASSWORD
Password or LM:NTLM hash, will prompt if not specified
-at {NTLM,SIMPLE}, --authtype {NTLM,SIMPLE}
Authentication type (NTLM or SIMPLE, default: NTLM)
Output options:
-o DIRECTORY, --outdir DIRECTORY
Directory in which the dump will be saved (default:
current)
--no-html Disable HTML output
--no-json Disable JSON output
--no-grep Disable Greppable output
--grouped-json Also write json files for grouped files (default:
disabled)
-d DELIMITER, --delimiter DELIMITER
Field delimiter for greppable output (default: tab)
Misc options:
-r, --resolve Resolve computer hostnames (might take a while and
cause high traffic on large networks)
-n DNS_SERVER, --dns-server DNS_SERVER
Use custom DNS resolver instead of system DNS (try a
domain controller IP)
-m, --minimal Only query minimal set of attributes to limit memmory
usage
La mayoría de los servidores AD admiten autenticación NTLM. En el raro caso de que no lo hagan, use --authtype SIMPLE.
Por defecto, la herramienta genera todos los archivos en HTML, JSON y salida delimitada por tabuladores (grepeable). También hay dos archivos agrupados (users_by_group y computers_by_os) para mayor comodidad. Estos no tienen salida grepeable. La salida JSON para archivos agrupados está desactivada por defecto, ya que crea archivos muy grandes sin datos que no estén ya presentes en los otros archivos.
Una opción importante es la opción -r, que decide si el atributo DNSHostName de un equipo debe resolverse a una dirección IPv4. Si bien esto puede ser muy útil, el atributo DNSHostName no se actualiza automáticamente. Cuando el dominio AD utiliza subdominios para los nombres de host de los equipos, el DNSHostName a menudo será incorrecto y no se resolverá. También tenga en cuenta que resolver cada nombre de host en el dominio puede causar una carga alta en el controlador de dominio.
Por defecto, ldapdomaindump intentará volcar cada atributo que pueda leer a los archivos .json. En redes grandes, esto consume mucha memoria (ya que las relaciones de grupo se calculan actualmente en memoria antes de escribirse en el disco). Para volcar solo los atributos mínimos requeridos (los que se muestran por defecto en los archivos .html y .grep), use el interruptor --minimal.
LDAPDomainDump incluye una utilidad que se puede usar para convertir los archivos .json de ldapdomaindump a archivos CSV adecuados para BloodHound. La utilidad se llama ldd2bloodhound y se agrega a su PATH al instalarla. Alternativamente, puede ejecutarla con python -m ldapdomaindump.convert o con python ldapdomaindump/convert.py si está ejecutando desde el código fuente. La herramienta de conversión tomará los archivos .json de usuarios/grupos/equipos/relaciones de confianza y los convertirá a group_membership.csv y trust.csv, que puede agregar a BloodHound. Tenga en cuenta que estos archivos solo son compatibles con BloodHound 1.x, que es bastante antiguo. No hay planes para admitir la última versión, ya que el proyecto BloodHound.py fue creado para esto. Con el método de recopilación DCOnly, esta herramienta también solo hablará con LDAP y recopilará más información de la que recopilaría ldapdomaindump.
LDAPDomainDump incluye una utilidad que se puede usar para generar los archivos .json de ldapdomaindump en una salida similar a enum4linux. La utilidad se llama ldd2pretty y se agrega a su PATH al instalarla. Alternativamente, puede ejecutarla con python -m ldapdomaindump.pretty o con python ldapdomaindump/pretty.py si está ejecutando desde el código fuente.
MIT