tags: LDAP LDAPSearch Enumerazione_LDAP_Esterna


Questa è la sintassi da usare per effettuare una scansione ad un server pubblico LDAP di una macchina:

 
ldapsearch [opzioni] [filtro] [attributi...]
 
  • ldapsearch: Invoca l’utility ldapsearch da riga di comando.
  • [opzioni]: Sono una serie di parametri opzionali che modificano il comportamento di ldapsearch. Le opzioni iniziano sempre con un trattino (-). Esempi di opzioni comuni sono -x, -H, -b, -D, -w, -s, -W, -ZZ, ecc.
  • [filtro]: È il filtro di ricerca LDAP che specifica quali entry (voci) nella directory LDAP devono essere restituite. Il filtro è una stringa che segue la sintassi dei filtri LDAP e viene racchiuso tra parentesi tonde (). Se non si specifica un filtro, il filtro predefinito è (objectClass=*), che restituisce tutte le entry (cosa di solito sconsigliata in directory grandi).
  • [attributi...]: È una lista opzionale di attributi LDAP che si desidera recuperare e visualizzare per le entry che corrispondono al filtro. Se non si specificano attributi, ldapsearch restituirà tutti gli attributi per ogni entry corrispondente (cosa che può generare un output molto prolisso). Si possono specificare uno o più nomi di attributi, separati da spazi.

Esempio

 
# Questo comando enumera tutti gli utenti del gruppo Users
 
ldapsearch -x -H ldap://192.168.0.222 -b "CN=Users,DC=SKILL,DC=CEH,DC=com"
 
Oppure:
 
ldapsearch -x -H ldap://MACHINE_IP:389 -b "dc=ldap,dc=thm" "(ou=People)"
 

Questo ultimo 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.

Analisi Risposta del Server:

user@tryhackme$ ldapsearch -x -H ldap://10.10.29.152:389 -b "dc=ldap,dc=thm" "(ou=People)"
# extended LDIF
#
# LDAPv3
# base <dc=ldap,dc=thm> with scope subtree
# filter: (ou=People)
# requesting: ALL
#
 
# People, ldap.thm
dn: ou=People,dc=ldap,dc=thm
objectClass: organizationalUnit
objectClass: top
ou: People
 
# search result
search: 2
result: 0 Success
 
# numResponses: 2
# numEntries: 1

L’output è in formato LDIF (LDAP Data Interchange Format), un formato standard per rappresentare dati LDAP in forma testuale. Le righe che iniziano con # sono commenti, utili per capire cosa sta succedendo.

  • # extended LDIF: Indica che l’output è in formato LDIF esteso.

  • # LDAPv3: Indica la versione del protocollo LDAP utilizzata (versione 3, la più recente e diffusa).

  • # base <dc=ldap,dc=thm> with scope subtree: Conferma il Base DN e lo scope (portata) della ricerca: la ricerca è stata effettuata partendo da dc=ldap,dc=thm e includendo tutta la sottodirectory (scope subtree).

  • # filter: (ou=People): Conferma il filtro di ricerca utilizzato: (ou=People).

  • # requesting: ALL: Conferma che sono stati richiesti tutti gli attributi (dato che non ne sono stati specificati esplicitamente dopo il filtro nel comando).

  • # (riga vuota): Riga vuota per separazione visiva.

  • # People, ldap.thm: Inizio della descrizione di una entry LDAP trovata. Il commento # People, ldap.thm è una descrizione user-friendly dell’entry (probabilmente derivata dal Common Name o nome dell’entry). ldap.thm sembra essere un nome di dominio o di organizzazione di esempio.

  • dn: ou=People,dc=ldap,dc=thm: dn sta per “Distinguished Name”. Questa riga indica il Distinguished Name (DN) dell’entry LDAP trovata: ou=People,dc=ldap,dc=thm. Il DN è l’identificativo univoco e completo dell’entry nella gerarchia LDAP. Come un “percorso completo” all’interno della directory.

  • objectClass: organizationalUnit: objectClass è un attributo LDAP che definisce il tipo di entry LDAP. In questo caso, objectClass: organizationalUnit indica che l’entry trovata è di tipo “Organizational Unit” (Unità Organizzativa). Le Organizational Units sono usate per strutturare la directory LDAP gerarchicamente. organizationalUnit è una delle objectClass standard in LDAP.

  • objectClass: top: objectClass: top è un altro attributo objectClass. Quasi tutte le entry LDAP (di qualsiasi tipo) devono avere objectClass: top tra i loro objectClass. top è una objectClass astratta di base da cui ereditano tutte le altre objectClass.

  • ou: People: ou è l’attributo Organizational Unit Name (nome dell’unità organizzativa). ou: People indica che il nome di questa organizational unit è “People”. Questo è il valore dell’attributo ou per questa entry. Ricorda che il filtro di ricerca era (ou=People), quindi è logico che l’entry trovata abbia proprio ou: People.

  • # (riga vuota): Riga vuota per separazione visiva.

  • # search result: Inizio della sezione di riepilogo del risultato della ricerca.

  • search: 2: Questo è un contatore interno di ldapsearch. In genere, non è particolarmente importante per interpretare il risultato in modo basico. Potrebbe indicare il numero di operazioni di ricerca LDAP interne eseguite (in questo caso, 2).

  • result: 0 Success: result: 0 è il codice di risultato LDAP (result code). 0 (zero) significa Success (Successo). Questo indica che la ricerca LDAP è stata completata senza errori. Altri codici di risultato (diversi da 0) indicherebbero errori (es. errore di autenticazione, errore di connessione, ecc.).

  • # numResponses: 2: Numero di risposte LDAP ricevute dal server. In questo caso, 2 risposte. Anche questo è più un dettaglio tecnico.

  • # numEntries: 1: numEntries: 1 è molto importante! Indica il numero di entry LDAP che sono state effettivamente restituite e corrispondono al filtro di ricerca. In questo caso, è stato restituito 1 entry, che è proprio l’entry ou=People,dc=ldap,dc=thm che abbiamo visto descritta sopra.

Come Modificare la Query per Ottenere Altre Informazioni?

Per ottenere informazioni diverse, devi modificare i parametri della query ldapsearch:

  • Cambiare il Filtro di Ricerca ([filtro]):

    • Per cercare utenti all’interno di “People”: Potresti provare un filtro come (&(objectClass=person)(ou=People)). Questo filtro combinato (& - AND logico) cercherebbe entry che sono sia di objectClass=person (tipicamente utenti) e che si trovano all’interno dell’Organizational Unit “People”. Tuttavia, questo presuppone che la directory LDAP sia strutturata in questo modo specifico. Potrebbe essere necessario adattare il filtro in base alla struttura reale della directory target.
    • Per cercare gruppi: Potresti usare un filtro come (objectClass=groupOfNames) o (objectClass=group), a seconda della objectClass usata per i gruppi nella directory target. E potresti combinare con ou=People se i gruppi sono organizzati dentro “People”.
    • Per cercare computer: Potresti usare (objectClass=computer) o (objectClass=device), di nuovo, a seconda della objectClass specifica.
    • Per cercare tutte le entry all’interno di “People”: Se vuoi listare tutto ciò che c’è direttamente dentro l’Organizational Unit “People” (senza scendere ulteriormente nella gerarchia), potresti usare un filtro più generico come (objectClass=*) e cambiare lo scope della ricerca (vedi sotto). Ma un filtro (objectClass=*) da solo con scope subtree (come di default) cercherebbe in tutta la sottodirectory di Base DN, non solo all’interno di “People”.
  • Cambiare il Base DN (-b "[basedn]"):

    • Se vuoi cercare tutta la directory LDAP a partire dalla radice, potresti provare a usare un Base DN come dc=ldap,dc=thm (come nell’esempio) o, a volte, una stringa vuota "" come Base DN per indicare la radice dell’intera directory (non sempre permesso, dipende dalla configurazione del server LDAP e dai permessi).
    • Se sai che gli utenti sono organizzati sotto un altro ramo della directory (es. sotto ou=Users,dc=example,dc=com), dovresti usare quel DN come Base DN per concentrare la ricerca in quella parte della directory.
  • Specificare gli Attributi da Restituire ([attributi...]):

    • Invece di ldapsearch -x ... "(ou=People)", potresti fare:
      • ldapsearch -x ... "(objectClass=person)" cn mail: Cerca entry di tipo person e restituisci solo gli attributi cn (Common Name) e mail (indirizzo email).
      • ldapsearch -x ... "(objectClass=groupOfNames)" cn member: Cerca entry di tipo groupOfNames e restituisci solo gli attributi cn (Common Name del gruppo) e member (lista dei membri del gruppo).
  • Modificare le Opzioni di Autenticazione (se l’accesso anonimo non è sufficiente):

    • Se hai bisogno di autenticarti con credenziali per fare query più avanzate (o se l’accesso anonimo è disabilitato), dovrai usare le opzioni -D "[bind DN]" -w "[password]" di ldapsearch.
      • -D "[bind DN]": Specifica il Distinguished Name dell’utente (o account di servizio) da usare per l’autenticazione (bind).
      • -w "[password]": Specifica la password dell’utente/account di servizio. Attenzione: La password viene passata sulla riga di comando in chiaro! Per password più sicure, usa l’opzione -W (prompt interattivo per la password) o autenticazione Kerberos (-Y GSSAPI -U [username]).
  • Modificare lo Scope della Ricerca (-s [scope]):

    • -s base: Scope base. Cerca solo l’entry di Base DN stessa, non le entry sottostanti. Utile per verificare se un Base DN esiste.
    • -s one: Scope onelevel. Cerca solo le entry direttamente subordinate al Base DN (un livello sotto), ma non nei livelli più profondi.
    • -s sub (o senza -s): Scope subtree (predefinito). Cerca nel Base DN e in tutta la sottodirectory al di sotto (ricorsivamente).