tags: LDAP LDAPSearch Enumerazione_LDAP_Esterna
LDAP (Lightweight Directory Access Protocol) è il linguaggio con cui si interroga la rubrica di Active Directory. AD è una directory gerarchica di oggetti (utenti, gruppi, computer, OU); LDAP è il protocollo per cercarli e leggerne gli attributi.
Analogia Immagina AD come la rubrica interna di una grande azienda. LDAP è il modo di interrogarla. Il bind è mostrare il badge all'ingresso:
- Bind anonimo = entri senza badge → vedi solo le informazioni della hall (metadati) e i pochi fascicoli lasciati pubblici.
- Bind autenticato = badge da dipendente → accedi alla rubrica completa, secondo i tuoi permessi.
- I fascicoli dei dirigenti (account amministrativi) sono in cassaforte e restano chiusi anche a molti dipendenti.
Porte da ricordare:
| Porta | Servizio |
|---|---|
| 389 | LDAP |
| 636 | LDAPS (LDAP su TLS) |
| 3268 | Global Catalog (query sull’intera foresta) |
| 3269 | Global Catalog su TLS |
Enumerazione di Base
Questa è la sintassi da usare per effettuare una scansione base ad un server pubblico LDAP di una macchina:
ldapsearch -x -H ldap://10.211.11.10 -s base
Enumerazione Avanzata
Con l’enumerazione base dovrebbe essere apparso il dominio nella sezione rootDomainNamingContex, dovremo inserirlo nella flag -b come nei seguenti esempi:
ldapsearch -x -H ldap://10.10.1.11 -b "dc=CEH,dc=com"
ldapsearch -x -H ldap://MACHINE_IP:389 -b "dc=ldap,dc=thm" "(ou=People)"
ldapsearch -x -H ldap://10.211.11.10 -b "dc=tryhackme,dc=loc" "(objectClass=person)"
ldapsearch -x -H ldap://192.168.0.222 -b "CN=Users,DC=SKILL,DC=CEH,DC=com"
Questo comando significa:
Connettiti al server LDAP all’indirizzo 10.10.29.152 sulla porta 389 (flag -H) usando una connessione anonima (flag -x). Inizia la ricerca a partire dal punto dc=ldap,dc=thm nella gerarchia LDAP (flag -b). Cerca tutte le entry LDAP che si trovano all’interno (sottodirectory) di dc=ldap,dc=thm e che hanno un attributo ou uguale a People. Restituisci tutti gli attributi per ogni entry trovata.
Workflow Tipico
Step 1 — Trovare il base DN (funziona anche da anonimo)
Prima di cercare oggetti, ti serve il naming context (il base DN, es. dc=CEH,dc=com). Si ricava dal rootDSE, spesso leggibile anche anonimamente:
# solo il naming context
ldapsearch -x -H ldap://10.10.1.22 -s base namingContexts
# tutto il rootDSE (metadati del server)
ldapsearch -x -H ldap://10.10.1.22 -s baseStep 2 — Tentativo di enumerazione anonima
# dump di tutti gli oggetti sotto il base DN (se l'anonimo è permesso)
ldapsearch -x -H ldap://10.10.1.22 -b "dc=CEH,dc=com"Se l'anonimo è bloccato Un errore tipo
Operations error … In order to perform this operation a successful bind must be completedsignifica che l'operazione anonima non è permessa: devi autenticarti.
Step 3 — Bind autenticato (la soluzione)
Con le credenziali fornite dal lab ottieni il quadro completo. Verifica prima il tuo contesto, poi interroga in modo mirato:
# controlla con quale identità sei connesso
ldapwhoami -x -H ldap://10.10.1.22 -D "CEH\\utente" -w 'password'
# query mirata su un utente specifico, chiedendo SOLO gli attributi che ti servono
ldapsearch -x -H ldap://10.10.1.22 \
-D "CEH\\utente" -w 'password' \
-b "dc=CEH,dc=com" \
"(sAMAccountName=jason)" userPrincipalName sAMAccountName memberOfMeglio i filtri del
grepFareldapsearch ... | grep attributofunziona ma è grezzo: scarichi tutto e filtri a valle. Molto più pulito richiedere direttamente gli attributi dopo il filtro (come sopra), e usare un filtro LDAP per selezionare gli oggetti giusti.