🐈‍⬛
H4CKdotCL
Laboratorio
  • 🪅Bienvenidos al Book
  • Certificaciones
    • ⏳Junior Penetration Tester - eJPTv2
    • 🥉Ethical Hacking Professional Certification - CEHPC
    • 🥉Cybersecurity Awareness Professional Certification - CAPC
  • Metodología y Fases de Hacking Ético
    • Metodologías
      • Metodología OWASP (Open Web Application Security Project)
      • Metodología PTES
      • Metodología ISSAF
      • Metodología OSSTMM
    • Recopilación Pasiva de Información
      • Sublist3r
      • Httpx
      • theHarvester
      • Google Dorks
      • Wafw00f
      • Shodan
      • Whatweb
    • Recopilación Activa de Información
      • enum4linux
      • Guía de uso para Gobuster
      • Nmap (Network Mapper)
      • Wfuzz
      • SecList
      • FFUF
      • SMBClient
      • CrackMapExec
      • SMBMap
      • WPScan
      • Steghide
      • subfinder
    • SQLMap
    • Hydra
  • Utilidades
    • Docker: Potenciando Laboratorios de Pentesting
    • 📖Ejemplos de informes de Hacking Ético y auditoría de seguridad
  • Vulnerabilidades Web
    • IDOR (Insecure Direct Object Reference)
    • SSRF (Server-Side Request Forgery)
    • CSRF (Cross-Site Request Forgery)
    • File Upload Vulnerabilities
    • LFI (Local File Inclusion)
    • RFI (Remote File Inclusion)
    • XSS (Cross-Site Scripting)
    • XXE (XML External Entity)
    • Template Injections
    • Clickjacking
    • Broken Access Control
    • SQL Injection (Inyección SQL)
    • NoSQL Injection (Inyección NoSQL)
    • LDAP Injection (Inyección LDAP)
    • Log Poisoning
    • Open Redirect Bypass
Con tecnología de GitBook
En esta página

¿Te fue útil?

  1. Vulnerabilidades Web

LDAP Injection (Inyección LDAP)

🌐 Vulnerabilidad: LDAP Injection


🕵️‍♂️ ¿Qué es LDAP Injection?

LDAP Injection es una vulnerabilidad que ocurre cuando un atacante manipula consultas LDAP (Lightweight Directory Access Protocol) para alterar la lógica de búsqueda o autenticación. Esto puede dar acceso no autorizado a sistemas, permitir eludir autenticaciones o modificar registros en un servidor LDAP.


⚙️ ¿Cómo se produce?

  1. Entrada de usuario no validada:

    • Los datos del usuario se incorporan directamente en consultas LDAP.

  2. Manipulación de la consulta:

    • El atacante introduce caracteres especiales para modificar la lógica de la consulta.

  3. Ejecución del ataque:

    • El servidor LDAP procesa la consulta modificada y devuelve resultados no esperados.


🛠️ Mecanismo de ataque

Ejemplo de consulta LDAP básica para autenticación:

(&(uid=<USER_INPUT>)(password=<USER_PASSWORD>))

Un atacante puede inyectar en <USER_INPUT> un payload como:

*)(uid=*)(

Esto transforma la consulta en:

(&(uid=*)(uid=*)(password=<USER_PASSWORD>))

📌 Resultado: El filtro uid=* coincide con todos los usuarios, permitiendo eludir la autenticación.


🎯 Impacto

  • Autenticación eludida: Acceso no autorizado a sistemas y datos.

  • Exposición de datos sensibles: Obtención de información de usuarios o configuraciones.

  • Modificación no autorizada: Cambios en atributos de usuarios u objetos.

  • Escalamiento de privilegios: Acceso a cuentas administrativas o de mayor nivel.


📉 Puntaje CVSS v3

  • Vector de ataque: Red

  • Complejidad del ataque: Media

  • Impacto en confidencialidad: Alto

  • Impacto en integridad: Alto

  • Impacto en disponibilidad: Medio

  • Puntaje CVSS v3: 7.0 - 9.0 (Crítico) 🔥


🧑‍💻 Ejemplo práctico

Código vulnerable en Java:

String filter = "(&(uid=" + username + ")(password=" + password + "))";
DirContext ctx = new InitialDirContext(env);
NamingEnumeration<?> results = ctx.search("ou=users,dc=example,dc=com", filter, null);

Entrada del atacante:

  • username = *)(uid=*)

  • password = cualquier valor

Consulta generada:

(&(uid=*)(uid=*)(password=any_password))

📌 Esto devuelve todos los usuarios, permitiendo el acceso al atacante.


🛡️ ¿Cómo prevenir LDAP Injection?

1️⃣ Validar y sanitizar entradas

Verifica que las entradas de usuario no contengan caracteres especiales como *, ), (, o \:

username = username.replaceAll("[*()\\\\]", "");

2️⃣ Uso de consultas parametrizadas

Utiliza APIs LDAP que admitan parámetros seguros para construir consultas:

String filter = "(&(uid=?)(password=?))";
SearchControls controls = new SearchControls();
controls.setReturningAttributes(new String[] { "cn" });
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);

ctx.search("ou=users,dc=example,dc=com", filter, new Object[] { username, password }, controls);

3️⃣ Autenticación mediante hash

En lugar de autenticar directamente con LDAP, compara los hashes de contraseñas para evitar consultas sensibles:

String hashedPassword = hash(password);
if (hashedPassword.equals(storedHashedPassword)) {
    // Autenticación exitosa
}

4️⃣ Principio de menor privilegio

Configura el servidor LDAP para que las cuentas utilizadas por la aplicación tengan permisos mínimos necesarios.

5️⃣ Registro y monitoreo

Registra y monitorea las consultas LDAP para identificar patrones sospechosos.

6️⃣ Implementar listas blancas

Solo permite atributos y valores que coincidan con un formato predefinido:

if (!username.matches("^[a-zA-Z0-9]+$")) {
    throw new IllegalArgumentException("Entrada inválida.");
}

💡 Dato extra: Los ataques de LDAP Injection son más comunes en sistemas que usan servicios de directorio para autenticar usuarios, como Active Directory o OpenLDAP.

🚨 Nota importante: La mitigación no solo requiere validación de entradas, sino también configuración segura del servidor LDAP para limitar accesos y operaciones.

AnteriorNoSQL Injection (Inyección NoSQL)SiguienteLog Poisoning

Última actualización hace 6 meses

¿Te fue útil?