Open In App

LDAP Enumeration

Last Updated : 30 Apr, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

Before continuing reading, read about LDAP in general. Lightweight Directory Access Protocol (LDAP) is an Internet protocol that works on TCP/IP, used to access information from directories. The LDAP protocol is used to access an Active Directory.

LDAP enumeration is a method of enumeration of the Active Directory. The service typically operates on TCP ports 389 and 639 by default. LDAP enumeration can enumerate usernames, addresses, and loads of juicy information that can be reused for other attacks, such as social engineering attacks. This may include:

  • Usernames: Who's inside the system?
  • Groups: Which groups or teams are there?
  • Computers: What machines are attached to?
  • Addresses: Contact or company details.

For ethical hackers or penetration testers, LDAP enumeration helps understand a network’s structure, which can be useful for security assessments. However, attackers might misuse it for social engineering or other attacks, so it’s critical to perform enumeration only with permission

Tools Used For LDAP Enumeration:

Several tools make LDAP enumeration easier, each with unique strengths. Here’s a quick overview of the ones we’ll cover:

  • Nmap: A network scanning utility with LDAP query scripts.
  • enum4linux: An enumerating Linux tool for Windows Active Directory information.
  • windapsearch: A Python program for comprehensive LDAP queries in Windows domains.
  • ldapsearch: A command-line program for accurate LDAP searches.
  • JXplorer: A graphical LDAP client for browsing directories visually.

Installing the Tools on Linux

Before we begin, ensure that the tools are installed on your Linux platform (e.g., Ubuntu or Kali Linux). Open a terminal (Ctrl + Alt + T) and enter these commands:

# Update package list
sudo apt update

# Install Nmap
sudo apt install nmap

# Install enum4linux
sudo apt install enum4linux

# Install ldapsearch (part of openldap-utils)
sudo apt install ldap-utils

# Install JXplorer (GUI tool)
sudo apt install jxplorer

LDAP Enumeration using Nmap:

Using the LDAP-search NSE script of Nmap we can scan for the LDAP service, and then we can attempt other arguments to this script such as LDAP.searchattrib, you can also use the LDAP-brute script, and when you have no valid credentials. It's a good tool for finding LDAP services and pulling details like usernames or server information.

To verify an LDAP service on port 389 and list user accounts:

nmap -p 389 --script ldap-search --script-args 'ldap.username="cn=ldaptest,cn=users,dc=cqure,dc=net",ldap.password=ldaptest,ldap.qfilter=users,ldap.attrib=sAMAccountName' <IP_ADDRESS>
  • - p 389: It scans the TCP port 389.
  • --script ldap-search: This option runs the ldap-search script.
  • --script-args: This option specifies credentials and filters (e.g., sAMAccountName for usernames).
  • <IP_ADDRESS>: Replace with the target server’s IP (e.g., 192.168.1.10).
Nmap tool for scanning
 

Example 2: Custom LDAP Query

To find Windows servers and their details (e.g., operating system, creation date) use the below command:

nmap -p 389 --script ldap-search --script-args 'ldap.username="cn=ldaptest,cn=users,dc=cqure,dc=net",ldap.password=ldaptest,ldap.qfilter=custom,ldap.searchattrib="operatingSystem",ldap.searchvalue="Windows *Server*",ldap.attrib={operatingSystem,whencreated,OperatingSystemServicePack}' <IP_ADDRESS>
  • ldap.qfilter=custom: Allows custom filtering.
  • ldap.searchvalue="Windows *Server*": Targets Windows Server systems.
  • ldap.attrib: Retrieves specific attributes like operatingSystem.

Note: If you don’t have credentials try the ldap-brute to test for weak passwords (only with permission):

nmap -p 389 --script ldap-brute <IP_ADDRESS>

LDAP Enumeration Using enum4linux:

enum4linux is a Linux tool designed for enumerating Windows Active Directory and SMB services, including LDAP. It’s excellent for extracting user accounts, groups, and domain details without needing a GUI.

Example: Enumerate Accounts and Groups

To list accounts and groups from an LDAP server:

enum4linux <IP_ADDRESS> | egrep "Account|Domain|Lockout|group"
  • <IP_ADDRESS>: The target server’s IP.
  • egrep: Filters output to show only lines with “Account,” “Domain,” “Lockout,” or “group.”
LDAP Scanning

Note: enum4linux is simple and doesn’t require credentials for anonymous queries, though authenticated scans yield more data.

LDAP Enumeration Using Windapsearch:

windapsearch is a Python script that uses LDAP queries to enumerate users, groups, computers, and privileged accounts in a Windows domain. It’s ideal for penetration testers who have valid credentials.

Example 1: Enumerate Computers

To list computers in the domain:

python3 windapsearch.py --dc-ip <IP_ADDRESS> -u <USERNAME> -p <PASSWORD> --computers
  • --dc-ip: The domain controller’s IP.
  • -u <USERNAME>: A valid domain username (e.g., domain\user).
  • -p <PASSWORD>: The user’s password.
  • --computers: Targets computer objects.

Example 2: Enumerate Groups

To list groups:

python3 windapsearch.py --dc-ip <IP_ADDRESS> -u <USERNAME> -p <PASSWORD> --groups

Example 3: Enumerate Domain Admins

To find privileged users (e.g., Domain Admins):

python3 windapsearch.py --dc-ip <IP_ADDRESS> -u <USERNAME> -p <PASSWORD> --da

Example 4: Enumerate Privileged Users

To list users with elevated privilege

python3 windapsearch.py --dc-ip <IP_ADDRESS> -u <USERNAME> -p <PASSWORD> --privileged-users

Note: windapsearch is precise and supports CSV output for further analysis, making it a favorite for Active Directory enumeration.

LDAP Enumeration Using Ldapsearch:

LDAP search makes a connection to an LDAP server, and it executes a search by using different paraments. The filter works to the string representation for search filters as defined in RFC 4515 else it uses (objectClass=*).

Example 1: Check Null Credentials

To test if the LDAP server allows anonymous access:

ldapsearch -x -H ldap://<IP_ADDRESS> -D '' -w '' -b "DC=<SUBDOMAIN>,DC=<TLD>"
  • -x: Uses simple authentication.
  • -H ldap://<IP_ADDRESS>: Specifies the LDAP server.
  • -D '' -w '': Attempts anonymous login (no username or password).
  • -b "DC=<SUBDOMAIN>,DC=<TLD>": Sets the search base (e.g., DC=example,DC=com).

Example 2: Validate Credentials

To query with valid credentials:

ldapsearch -x -H ldap://<IP_ADDRESS> -D '<DOMAIN>\<USERNAME>' -w '<PASSWORD>' -b "DC=<SUBDOMAIN>,DC=<TLD>"
  • -D '<DOMAIN>\<USERNAME>': The user’s domain and username (e.g., MYDOM\john).
  • -w '<PASSWORD>': The password.
  • -b: The search base.

Note: For secure connections, use LDAPS (-H ldaps://<IP_ADDRESS>:636). If you get a “bind must be completed” error, the credentials are invalid.

LDAP Enumeration with JXplorer

JXplorer is a graphical LDAP client that lets you browse and query LDAP directories visually, like a file explorer for Active Directory. It’s great for beginners who prefer a GUI over the command line.

1. Launch JXplorer from the terminal:

jxplorer

2. Connect to the LDAP server:

  • Host: Enter the server’s IP or hostname.
  • Port: Use 389 for LDAP or 636 for LDAPS.
  • Base DN: Set to DC=<SUBDOMAIN>,DC=<TLD> (e.g., DC=example,DC=com).
  • User DN/Password: Enter credentials or leave blank for anonymous access.

3. Browse the directory tree to view users, groups, or computers.

Security Considerations

LDAP enumeration can reveal sensitive data so we need to responsibly use it don't use this without permission, here are some security consideration:

  • Ethical Use: Do not enumerate systems unless authorized since it can be equated to illegal hacking.
  • Secure Connections: Protect credentials and searches with LDAPS on port 636 to prevent exposing sensitive information.
  • Limit Anonymous Access: Servers that support unsecured anonymous searches are vulnerable. Secure access through NTLM or Kerberos authentication.
  • Validate Inputs: When using windapsearch or ldapsearch, ensure the credential and filter values are accurate, or else they will be subjected to LDAP
  • Monitor Logs: Inspect LDAP server lists and monitor for suspicious searching activity as they might act as indicators of enumeration children reactions.

Why Use LDAP Enumeration

LDAP enumeration is valuable for:

  • Security Testing: Direct penetration testers and assist them in determining vulnerabilities within Active Directory.
  • Network Management: Assist system administrators while they audit user/group accounts.
  • Learning: Teaches cybersecurity students about LDAP and directory services.

Conclusion

LDAP enumeration is a key skill for exploring Active Directory and understanding network structures. By using Nmap, enum4linux, windapsearch, ldapsearch, and JXplorer, you can uncover usernames, groups, and more on TCP ports 389 and 636. Whether you’re securing a network or learning cybersecurity, LDAP enumeration is a must-know technique.


Next Article

Similar Reads