LDAP Injection (Lightweight Directory Access Protocol)

14:54 0 Comments A+ a-

LDAP

Las siglás de "LDAP" hacen referencia a "Lightweight Directory Access Protocol" o en español "Protocolo Ligero de Acceso a Directorios", es un protocolo de acceso ligero a directorios en el cual hay almacenado un conjunto de información de una red especifica. Existen distintas versiones de LDAP, por ejemplo, en Windows existe "Active Directory", es un servicio de directorio perteneciente a Microsoft, es decir, es como un protocolo de LDAP compatible con Windows, también existe Apache directory service, supongo que muchos ya deben conocer Apache. En LDAP se ejecutan querys/consulta, es un poco parecido a SQL.

Inyección LDAP

Entonces, con la definición de LDAP ya tenemos nuestras deducciones sobre que es la Inyección "LDAP" , La inyección LDAP básicamente es una técnica con la cúal "alteramos" los datos de validación de entrada que ejecutamos al procesar una acción, es casi parecida a la Inyección SQL pero está usa filtros, por ejemplo, Tenemos un formulario HTML con el cual vamos a hacer una búsqueda de texto en un sitio web; procesamos los datos de entrada y nos da como resultado si se encontró algún texto que este relacionado con lo ingresado. Podemos alterar la consulta que se ejecuta en el protocolo LDAP de manera que nos devuelva como por ejemplo la credencial de X usuario de una cédula de identidad. De la siguiente manera:

Escenario

Formulario HTML:

    Búscar: 
    
Más o menos ese sería el formulario, entonces, cuando ejecutamos esto se ejecuta una query de parte de LDAP procesando los datos, de la siguiente manera:

Procesamiento:

    string user = Request.Querystring("user")
    String ldapSearchQuery = "(cn=" + user +")";
Allí, Con Request.Querystring("user") estamos requiriendo en la query la cadena de la entrada "user", es decir, del input user, en la otra línea estamos haciendo una BUSQUEDA de un string/cadena, y hacemos entre los parentesis un filtro con el cúal usamos el atributo "cn" (nombre común o Common Name), entonces, esto sería igual a una concatenación de los datos enviados en el input.

Entonces, si un atacante ejecuta lo siguiente en el formulario:

"m5f3r0)(|(email=*)"

Básicamente ya tenemos una idea de lo que hace, esto nos retornara el email del usuario "m5f3r0"

Allí, los filtros serían lo que va entre parentesis (), también estamos haciendo uso del operador lógico OR | , existen otros dos como AND & y NOT ! .

Podemos notar en la consulta del procesamiento que usamos "string" y "String" ambos significan el llamado de una cadena.

Hemos logrado alterar la consulta como si fuese una ejecución remota, entonces, mediante la validación de entrada hemos retornado un valor "privado" de un usuario.

Operadores lógicos:

AND: &
OR: |
NOT: !


Para hacer uso de los operadores lógicos, iniciamos con un paréntesis () (filtro). y entre el paréntesis colocamos el operador , luego iniciamos con otro paréntesis con el atributo y su respectivo valor.

(&(atributo=resultado))

Y si colocamos otro atributo simplemente luego de eso abrimos otro parentesis. De está misma forma, podemos usar otros operadores.

Creación de consultas

Para la creación de consultas debemos tener conocimientos básicos acerca de como funcionan algunos filtros de LDAP, operadores, uso de atributos, etc. Para ello, existe mucha documentación en línea que con leerla les garantizo que ya sabrán crear sus propias consultas. Aquí les dejo algunos sitios para aprender mucho más:

http://wiki.bizagi.com/es/index.php?title=Atributos_LDAP
http://www.elladodelmal.com/2007/10/ldap-injection-blind-ldap-injection.html

Bueno, eso ha sido todo, espero les haya gustado el tema aunque fuese poco con poca documentación, actualmente estoy estudiando más está técnica ya que es un POCO complicada, a pesar de la poca información que existe en la red. Tal vez haga más post con más información completa acerca de esto mismo.

- Créditos:

- M5f3r0: Por el post y las explicaciones acerca de la Inyección LDAP.
- Elladodelmal: Por el post acerca de la inyección LDAP, fue mi guía de referencia y allí es dónde estoy estudiando más acerca de está técnica.
- e-securing.com: Otra guía de referencia, y la query/consulta de búsqueda de una cadena/string me la hice en base al planteamiento dado allí.

- Referencias:

http://es.wikipedia.org/wiki/LDAP
http://www.e-securing.com/novedad.aspx?id=59
http://www.elladodelmal.com/2007/10/ldap-injection-blind-ldap-injection.html

Autor: M5f3r0