LDAP Enumeration Query and enumerate LDAP directory services to discover domain information, users, groups, and organizational structure. LDAP is commonly used in Active Directory environments and provides a central location for accessing directory services.
Nmap LDAP Scan nmap -p 389,636,3268,3269 -sC -sV --open 10.10.10.10 nmap -p 389 --script ldap-rootdse,ldap-search 10.10.10.10
Ldapsearch Anonymous Bind ldapsearch -x -H ldap://10.10.10.10 -s base ldapsearch -x -H ldap://10.10.10.10 -s base namingContexts ldapsearch -x -H ldap://10.10.10.10 -b "DC=domain,DC=local"
Authenticated Bind ldapsearch -x -H ldap://10.10.10.10 -D "CN=user,CN=Users,DC=domain,DC=local" -w 'password' -b "DC=domain,DC=local" ldapsearch -x -H ldap://10.10.10.10 -D "user@domain.local" -w 'password' -b "DC=domain,DC=local" "(objectClass=user)" ldapsearch -x -H ldap://10.10.10.10 -D "user@domain.local" -w 'password' -b "DC=domain,DC=local" "(mail=john.doe@domain.local)" ldapsearch -x -H ldap://10.10.10.10 -D "user@domain.local" -w 'password' -b "DC=domain,DC=local" "(objectClass=group)" ldapsearch -x -H ldap://10.10.10.10 -D "user@domain.local" -w 'password' -b "DC=domain,DC=local" "(&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=4194304))"
LDAPS (Secure LDAP) ldapsearch -x -H ldaps://10.10.10.10:636 -D "user@domain.local" -w 'password' -b "DC=domain,DC=local"
PowerShell LDAP Queries Find Primary Domain Controller $domainObj = [System.DirectoryServices.ActiveDirectory.Domain ]::GetCurrentDomain()$PDC = $domainObj .PdcRoleOwner.NameWrite-Host "Primary DC: $PDC "
Get Distinguished Name ([adsi ]'' ).distinguishedName
ADSI Queries $searcher = [adsisearcher ]"" $searcher .Filter = "(objectClass=user)" $searcher .FindAll()$searcher = [adsisearcher ]"(samaccountname=username)" $searcher .FindOne()
Windapsearch (Linux) python3 windapsearch.py -d domain.local -u user -p password --dc-ip 10.10.10.10 -U python3 windapsearch.py -d domain.local -u user -p password --dc-ip 10.10.10.10 -G python3 windapsearch.py -d domain.local -u user -p password --dc-ip 10.10.10.10 -C python3 windapsearch.py -d domain.local -u user -p password --dc-ip 10.10.10.10 --privileged-users
LDAPDomainDump ldapdomaindump -u 'domain\user' -p 'password' 10.10.10.10 ldapdomaindump -u 'domain\user' -p 'password' 10.10.10.10 -o /tmp/ldap_dump/
Common LDAP Filters User Filters (objectClass=user) (&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))) (&(objectClass=user)(servicePrincipalName=*)) (&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=32)) (&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=65536)) (&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=4194304))
Group Filters (objectClass=group) (cn=Domain Admins) (member=CN=user,CN=Users,DC=domain,DC=local )
Computer Filters (objectClass=computer) (&(objectClass=computer)(userAccountControl:1.2.840.113556.1.4.803:=8192)) (&(objectClass=computer)(operatingSystem=*server*))
LDAP Injection Authentication Bypass username: * password: * username: admin)(|(password=* password: dummy username: *)(objectClass=*
Filter Injection (&(objectClass=user)(sAMAccountName=*)(userPassword=*)) (cn=*) (objectClass=*)
Notes LDAP Ports:
389: LDAP (unencrypted)
636: LDAPS (SSL/TLS encrypted)
3268: Global Catalog (unencrypted)
3269: Global Catalog (SSL/TLS encrypted)
Distinguished Names (DN):
Format: CN=name,OU=unit,DC=domain,DC=com
CN = Common Name (user, computer, or object name)
OU = Organizational Unit
DC = Domain Component
Read from right to left (domain components first, then containers, then object)
Anonymous Bind:
Some LDAP servers allow anonymous queries
Always try anonymous bind first before authenticated queries
May reveal sensitive information without credentials
LDAP Injection:
Similar to SQL injection but targets LDAP queries
Special characters: * ( ) | &
Input validation is critical to prevent injection attacks
Test for injection in login forms and search fields
Primary Domain Controller (PDC):
Only one PDC per domain
Holds the most up-to-date information
Use PDC for accurate enumeration results
Find PDC using PdcRoleOwner property
Useful Attributes:
sAMAccountName: Windows login name
userPrincipalName: User’s email-style login
memberOf: Groups the user belongs to
servicePrincipalName: Service accounts (Kerberoastable)
userAccountControl: Account flags (disabled, password settings, etc.)
adminCount: Indicates privileged account
Security Considerations:
LDAP traffic is unencrypted by default
Use LDAPS (port 636) for encrypted communication
Self-signed certificates can be spoofed
Credentials transmitted in clear text over LDAP