LDAP - Data Exfiltration & Blind Exploitation
Blind LDAP Injection : Technique de Recherche de Mot de Passe avec Filtres Progressifs
Pour retrouver un mot de passe (ou d’autres champs comme description
) avec une Blind LDAP Injection, on peut utiliser une technique de filtrage progressif en testant chaque caractère l'un après l'autre.
Étapes et Exemples de Filtrage Progressif
Requête de base pour tester le premier caractère :
Filtre injecté :
(&(uid=admin)(userPassword=a*))
But : VĂ©rifier si le mot de passe commence par "a".
Résultat : Si l’application répond positivement (par exemple, connexion réussie), alors le premier caractère du mot de passe est "a". Sinon, on essaie "b".
Filtrage progressif du premier au deuxième caractère :
Si le premier caractère est confirmé comme étant "a", on passe à la séquence suivante pour tester le deuxième caractère.
Filtre injecté :
(&(uid=admin)(userPassword=ab*))
But : VĂ©rifier si le mot de passe commence par "ab".
Résultat : Si la réponse est positive, les deux premiers caractères sont "ab". Sinon, on continue avec "ac", "ad", etc.
Continuation du filtrage pour affiner chaque caractère :
Pour chaque caractère suivant, on répète le même schéma en allongeant progressivement la séquence :
Filtre injecté :
(&(uid=admin)(userPassword=abc*))
But : Valider "abc" comme début du mot de passe.
Finaliser le mot de passe :
L’attaquant continue jusqu'à ce que la chaîne complète soit validée.
Blind LDAP Injection pour VĂ©rifier l'Existence d'un Attribut
Pour utiliser une Blind LDAP Injection afin de vérifier l'existence d'un attribut comme description
, on peut construire des requêtes LDAP qui infèrent si cet attribut existe ou non.
MĂ©thodologie
Filtre pour vérifier l'existence de l'attribut :
Filtre injecté :
(&(uid=htb-stdnt)(|(description=*)(password=invalid)))
Explication :
(&(uid=htb-stdnt)...)
: VĂ©rifie si l'utilisateurhtb-stdnt
existe.(|(description=*)(password=invalid))
: Utilise l'opérateur OR pour vérifier si l'attributdescription
existe (a n'importe quelle valeur) ou si le mot de passe est "invalid".
Objectif : Si la requête réussit et retourne une réponse positive, cela signifie que l'attribut
description
existe. Sinon, cela indique qu'il n'existe pas.
Approche Progressif pour DĂ©terminer la Valeur de description
description
Pour trouver des valeurs spécifiques d’un attribut comme description
, vous pouvez suivre une méthode de filtrage progressive.
Exemple de recherche pour l’attribut description
Test du premier caractère :
Filtre injecté :
(&(uid=htb-stdnt)(|(description=d*)(password=invalid)))
Objectif : VĂ©rifier si
description
commence par "d".
Test du deuxième caractère :
Si le premier caractère est valide, on continue :
Filtre injecté :
(&(uid=htb-stdnt)(|(description=de*)(password=invalid)))
Objectif : VĂ©rifier si
description
commence par "de".
Continuation pour chaque caractère :
Continuer ainsi en testant chaque caractère possible jusqu'à obtenir la valeur complète de
description
:Filtre injecté :
(&(uid=htb-stdnt)(|(description=det*)(password=invalid)))
Exemple avec d'autres attributs
Cette même méthode peut être utilisée pour d'autres attributs, comme le mot de passe ou tout autre champ :
Filtre pour tester si un mot de passe particulier est valide :
Filtre injecté :
(&(uid=htb-stdnt)(userPassword=a*))
Objectif : VĂ©rifier si le mot de passe commence par "a".
Résumé Synthétique
VĂ©rification d'Existence d'Attribut : Utiliser un filtre comme
(&(uid=htb-stdnt)(|(description=*)(password=invalid)))
pour déterminer si un attribut commedescription
existe.Recherche Progressive de Valeurs :
Commencer par tester des valeurs comme
(&(uid=htb-stdnt)(|(description=d*)(password=invalid)))
.Continuer à ajouter des caractères pour reconstruire la valeur de l'attribut.
Applications : Cette technique est utile pour déterminer la présence et la valeur des attributs sensibles dans un annuaire LDAP, tout en contournant les protections d'authentification.
Exemple de script réalisé par moi
Last updated