
Dumper di informazioni di Active Directory via LDAP
Strumento per il dump delle informazioni di Active Directory tramite LDAP
In un dominio Active Directory, molte informazioni interessanti possono essere recuperate tramite LDAP da qualsiasi utente (o macchina) autenticato. Questo rende LDAP un protocollo interessante per la raccolta di informazioni nella fase di ricognizione di un pentest di una rete interna. Un problema è che i dati provenienti da LDAP spesso non sono disponibili in un formato facile da leggere.
ldapdomaindump è uno strumento che mira a risolvere questo problema, raccogliendo e analizzando le informazioni disponibili tramite LDAP e producendole in un formato HTML leggibile dall'uomo, oltre che in json e csv/tsv/greppabili (leggibili da macchina).
Lo strumento è stato progettato con i seguenti obiettivi:
Lo strumento produce diversi file contenenti una panoramica degli oggetti nel dominio:
Oltre a due file raggruppati:
Richiede ldap3 > 2.0 e dnspython. ldapdomaindump richiede Python 3.6 o superiore.
Le dipendenze possono essere installate manualmente con pip install ldap3 dnspython future, ma nella maggior parte dei casi dovrebbero essere gestite da pip quando si installa il pacchetto principale da git o pypi.
Il pacchetto ldapdomaindump può essere installato con python setup.py install dal sorgente git, o per l'ultima release con pip install ldapdomaindump.
Ci sono 3 modi per utilizzare lo strumento:
python ldapdomaindump.pypython -m ldapdomaindumpldapdomaindumpL'aiuto può essere ottenuto con l'opzione -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
Strumento per il dump delle informazioni di dominio tramite LDAP. Esegue il dump di utenti/computers/gruppi e informazioni su sistemi operativi/appartenenza in output HTML/JSON/greppabili.
Opzioni obbligatorie:
HOSTNAME Hostname/ip o stringa di connessione ldap://host:port a cui connettersi (usa ldaps:// per SSL)
Opzioni principali:
-h, --help mostra questo messaggio di aiuto ed esce
-u USERNAME, --user USERNAME
DOMINIO\username per l'autenticazione, lascia vuoto per autenticazione anonima
-p PASSWORD, --password PASSWORD
Password o hash LM:NTLM, verrà richiesta se non specificata
-at {NTLM,SIMPLE}, --authtype {NTLM,SIMPLE}
Tipo di autenticazione (NTLM o SIMPLE, default: NTLM)
Opzioni di output:
-o DIRECTORY, --outdir DIRECTORY
Directory in cui verrà salvato il dump (default: corrente)
--no-html Disabilita output HTML
--no-json Disabilita output JSON
--no-grep Disabilita output greppabile
--grouped-json Scrive anche file json per i file raggruppati (default: disabilitato)
-d DELIMITER, --delimiter DELIMITER
Delimitatore di campo per output greppabile (default: tab)
Opzioni varie:
-r, --resolve Risolve i nomi host dei computer (potrebbe richiedere tempo e causare traffico elevato su reti grandi)
-n DNS_SERVER, --dns-server DNS_SERVER
Usa un resolver DNS personalizzato invece del DNS di sistema (prova un IP del controller di dominio)
-m, --minimal Interroga solo un insieme minimo di attributi per limitare l'uso della memoria
La maggior parte dei server AD supporta l'autenticazione NTLM. Nel raro caso in cui non sia supportata, usa --authtype SIMPLE.
Per impostazione predefinita, lo strumento produce tutti i file in HTML, JSON e output delimitato da tabulazioni (greppabile). Ci sono anche due file raggruppati (users_by_group e computers_by_os) per comodità. Questi non hanno un output greppabile. L'output JSON per i file raggruppati è disabilitato per default poiché crea file molto grandi senza dati che non siano già presenti negli altri file.
Un'opzione importante è l'opzione -r, che decide se l'attributo DNSHostName di un computer debba essere risolto in un indirizzo IPv4. Sebbene possa essere molto utile, l'attributo DNSHostName non viene aggiornato automaticamente. Quando il dominio AD utilizza sottodomini per i nomi host dei computer, il DNSHostName sarà spesso errato e non verrà risolto. Tieni anche presente che la risoluzione di ogni hostname nel dominio potrebbe causare un carico elevato sul controller di dominio.
Per default ldapdomaindump tenta di eseguire il dump di ogni singolo attributo che può leggere su disco nei file .json. In reti di grandi dimensioni, ciò utilizza molta memoria (poiché le relazioni di gruppo vengono attualmente calcolate in memoria prima di essere scritte su disco). Per eseguire il dump solo degli attributi minimi richiesti (quelli mostrati per default nei file .html e .grep), utilizza l'opzione --minimal.
LDAPDomainDump include un'utilità che può essere utilizzata per convertire i file .json di ldapdomaindump in file CSV adatti a BloodHound. L'utilità si chiama ldd2bloodhound e viene aggiunta al tuo PATH al momento dell'installazione. In alternativa puoi eseguirla con python -m ldapdomaindump.convert o con python ldapdomaindump/convert.py se lo esegui dal sorgente. Lo strumento di conversione prenderà i file .json di utenti/gruppi/computers/trust e li convertirà in group_membership.csv e trust.csv che puoi aggiungere a BloodHound. Nota che questi file sono compatibili solo con BloodHound 1.x che è piuttosto vecchio. Non ci sono piani per supportare l'ultima versione poiché il progetto BloodHound.py è stato creato per questo. Con il metodo di raccolta DCOnly questo strumento parlerà anche solo con LDAP e raccoglierà più informazioni di quante ne raccoglierebbe ldapdomaindump.
LDAPDomainDump include un'utilità che può essere utilizzata per produrre un output simile a enum4linux dai file .json di ldapdomaindump. L'utilità si chiama ldd2pretty e viene aggiunta al tuo PATH al momento dell'installazione. In alternativa puoi eseguirla con python -m ldapdomaindump.pretty o con python ldapdomaindump/pretty.py se lo esegui dal sorgente.
MIT