Inyecciones LDAP: Explicación y PoC
LDAP son las siglas de Protocolo Ligero de Acceso a Directorio, o en inglés (Lightweight Directory Access Protocol). Se trata de un conjunto de protocolos de licencia abierta que son utilizados para acceder a la información que está almacenada de forma centralizada en una red. Este protocolo se utiliza a nivel de aplicación para acceder a los servicios de directorio remoto.
Un directorio remoto es un conjunto de objetos que están organizados de forma jerárquica, tales como nombres, claves, direcciones, etc. Estos objetos estarán disponibles por una serie de cliente conectados mediante una red (interna o LAN), y proporcionarán las identidades y permisos para esos usuarios que los utilicen.
De forma general, estos directorios se utilizan básicamente para contener información virtual de usuarios, para que otros usuarios accedan y dispongan de información acerca de los contactos que están aquí almacenados. Además es capaz de comunicarse de forma remota con otros directorios LDAP. De esta forma se crea una base de datos de información descentralizada y completamente accesible
POC 1
Intentamos iniciar sesión con un nombre de usuario y una contraseña aleatorios, pero el resultado es negativo;
La arquitectura de la aplicación que soporta LDAP incluye componentes tanto del lado del servidor como del lado del cliente. Las consultas LDAP enviadas al servidor se conocen como filtros de búsqueda LDAP, que se construyen utilizando notación prefijo. A continuación, se muestra un ejemplo de un filtro de búsqueda LDAP:
Esta notación de filtro prefijo instruye a la consulta a encontrar un nodo LDAP con el nombre de usuario y la contraseña dados. La cual busca entradas en el directorio LDAP que cumplan con ambas condiciones: cn (Common Name) sea igual a «algo» y userPassword (contraseña del usuario) sea igual a «algo».
Si revisamos el codigo del aplicativo;
Podemos ver que el filtro se construye concatenando directamente el nombre de usuario y la contraseña en el filtro sin una adecuada sanitización. Si reemplazamos el nombre de usuario y la contraseña con un carácter especial, podemos eludir los controles de autenticación. Usar «*» como nombre de usuario y contraseña resultará en un inicio de sesión exitoso puesto que busca cualquier atributo que coincida con cualquier valor;
Esto altera significativamente la lógica de búsqueda y posiblemente nos permite el acceso no autorizado.
POC 2
Nuevamente nos encontramos ante una aplicación web, las cual nos pide un usuario y contraseña para entrar;
Pero el filtro el cual utilizamos para alterar la lógica esta vez no nos funciona;
Y esto se debe a que para evitar la inyección LDAP verifica la longitud de la entrada del usuario. Si la longitud es menor a 2, la entrada del usuario es inválida.
Pero podemos utilizar caracteres especiales distintos de «*» para crear consultas maliciosas y alterar la logica;
El filtro quedaría así;
Donde en username busca resultados que sean igual a admin inviertiendo la condicion buscando donde 1=0 junto al operador NOT y en password busca entradas que sean igual a q

Pedazo de post!! Muchas gracias por compartir
Muy bueno compi. Gran articulo
Muchas gracias compañero, gracias a ti por apoyarlo 😉
Muchas gracias compañero, un placer tenerte por aquí 😉