Las queries de búsqueda de LDAP son fundamentales para interactuar con directorios LDAP permitiéndote localizar y recuperar información almacenada en el directoorio. Entender cómo construir estas queries es crucial para utilizar efectivamente los servicios LDAP.

Una query de búsqueda LDAP consiste en varios componentes, cada uno usado para una cosa en la operación de búsqued:

  1. Base DN (Distinguished Name): Este es el punto de comienzo de la búsqueda en el árbol de directorios.
  2. Scope: Define cómo de profundo debe buscar desde el base DN. Puede ser uno de los siguientes:
    • base: Busca sólo el base DN.
    • one: Busca el hijo inmediao del base DN.
    • sub: Busca en el base DN y todos sus descendientes.
  3. Filter: Un criterio que debe coincidir con el resultado para que sea devuelto. Usa una sintaxis específica.
  4. Attributes: Especifica qué características de las entradas coincidentes deberían ser devueltas en los resultados.

La sintaxis básica de una query de búsqueda LDAP es como:

default
(base DN) (scope) (filter) (attributes)

Filtros y Sintaxis

Los filtros son el núcleo de las queries de búsqueda LDAP, definiendo las condiciones que lass entradas en el directorio deben cuemplir para ser incluídas en los resultados de búsqueda. La sintaxis de los filtros LDAP se define en RFC 4515, donde los filtros se presentan como strings con un formato específico como (canonicalName=value). Estos filtros pueden usar una variedad de operadores para refinar los criterios de búsqueda, incluyendo igualdad (=), presencia (=*), mayor y menor que (>=/<=).

Uno de los operadores más esenciales de LDAP es * el cual significa que coincida cualquier caracter. Este operador es crucial para formular coincidencias amplias o parciales.


Ejemplos de Filtros

Filtro Sencillo:

default
(cn=John Doe)

Este filtro devuelve entradas con un canonical name (cn) exactamente igual a "John Doe".

Wildcards:

php
(cn=J*)

Este filtro aplica el operador wildcard para que los resultados coincidan con cualquier cn que comience con "J".

Filtros Complejos con Operadores Lógicos:

Para queries de búsqueda más complejas, podemos usar filtros con operadores lógicos como AND (&), OR (|) o NOT (!).

default
(&(objectClass=user)(|(cn=John*)(cn=Jane*)))

Este filtro busca entradas clasificadas como "user" en su clase de objeto y tenga un canocical name que comience o con "John" o con "Jane".

Aunque no suelen estar expuestos, los servicios LDAP pueden ser accesibles a través de la red vía los puertos 389 (para conexiones StartTLS no encriptadas) y el 535 (para conexxiones SSL/TLS). Cuando los servicios LDAP son accesibles públicamente, herramientas como ldapsearch pueden ser usadas para interactuar con el servidor LDAP. Esta herramienta permite a un usuario realizar queries y modificar el directorio LDAP desde la línea de comandos.

bash
user@tryhackme$ ldapsearch -x -H ldap://MACHINE_IP: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

Este comando usa ldapsearch para realizar una búsqueda contra un servidor LDAP localizado en el puerto 389, comenzando en el base DN dc=ldap,dc=thm y usando un filtro que buscarña entradas bajo la OU "People".