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:

PortaServizio
389LDAP
636LDAPS (LDAP su TLS)
3268Global Catalog (query sull’intera foresta)
3269Global 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 base

Step 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 completed significa 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 memberOf

Meglio i filtri del grep Fare ldapsearch ... | grep attributo funziona 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.