LDAP Injection & Blind LDAP Injection (Parte III de III)
********************************************************
Índice:
LDAP Injection & Blind LDAP Injection (Parte I de III)
LDAP Injection & Blind LDAP Injection (Parte II de III)
LDAP Injection & Blind LDAP Injection (Parte III de III)
********************************************************
En este parte del artículo simplemente se han probado las inyecciones descritas por Sacha Faust en su documento "LDAP Injection" sobre entornos ADAM y OpenLDAP.
LDAP Injection con ADAM de Microsoft
Para realizar todas las pruebas de las cadenas a inyectar hemos utilizado la herramienta LDAP Browser que permite conectarse a distintos árboles LDAP y una cliente web creado con el componente IPWorksASP.LDAP de la empresa /n Software, para realizar las pruebas de ejecución de filtros. En la imagen 1 se muestra la estructura que hemos creado de ejemplo en ADAM.

Supongamos ahora que la aplicación web utiliza una consulta con el siguiente filtro: (cn=Impresora_1). Al lanzar esta consulta se obtiene 1 objeto, como se puede ver en la imagen siguiente:

Lo deseable por un atacante que realice una inyección sería poder acceder a toda la información mediante la inclusión una consulta que nos devolviera todas las impresoras, en un supuesto ataque. En el ejemplo, vemos cual debería ser el resultado a obtener con una consulta siguiendo la RFC 4515 sobre ADAM: (|(cn=Impresora_1)(cn=Impresora*))

Sin embargo, como se puede apreciar, para construir ese filtro, necesitaríamos inyectar un operador y un paréntesis al principio. En el ejemplo, la inyección no “parece” ser muy útil pues se está realizando en ambas condicionantes sobre cn, pero ese filtro sólo está creado para ilustrar la necesidad de inyectar código antes del filtro y en el medio del filtro. Si probamos la inyección propuesta por Sacha Faust en ADAM: (cn=Impresora_1)(|(cn=Impresora*))

Como se puede apreciar en la captura, en la última prueba, la inyección no produce ningún error, pero a diferencia de las pruebas que realiza Sacha Faust con SunOne Directory Server 5.0, el servidor ADAM no devuelve más datos. Es decir, sólo devuelve los datos del primer filtro completo y el resto de la cadena es ignorado.
LDAP Injection con OpenLDAP
Para realizar las pruebas de inyección en OpenLDAP hemos utilizado el árbol que ofrece de pruebas el propio proyecto OpenLPAD.org cuya estructura es la siguiente:

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obteniendo un único objeto como resultado: (uid=kurt)

Si quisiéramos ampliar el número de resultados, siguiendo la RFC 4515 deberíamos ejecutar una consulta en la que inyectáramos un operador OR y un filtro que incluyera a todos los resultados, como se puede ver en la siguiente imagen: (|(uid=kurt)(uid=*))

Si realizamos la inyección tal y como propone Sacha Faust en su documento sobre LDAP obtendríamos los siguientes resultados: (uid=kurt)(|(uid=*))

Como puede apreciarse en la captura, el servidor OpenLDAP ha ignorado el segundo filtro y solo ha devuelto un usuario, de igual forma que realizaba ADAM.
********************************************************
Índice:
LDAP Injection & Blind LDAP Injection (Parte I de III)
LDAP Injection & Blind LDAP Injection (Parte II de III)
LDAP Injection & Blind LDAP Injection (Parte III de III)
********************************************************
No hay comentarios:
Publicar un comentario