# Puerto 389: LDAP

**LDAP (Lightweight Directory Access Protocol)** es un protocolo de aplicación que se utiliza para acceder y gestionar servicios de directorio de manera centralizada. Los directorios LDAP se utilizan comúnmente para almacenar información sobre usuarios, grupos, dispositivos y otros objetos en una red. LDAP generalmente opera sobre el puerto 389 para comunicaciones no cifradas y sobre el puerto 636 para comunicaciones cifradas mediante SSL/TLS (LDAPS).

## <mark style="color:green;">Descripción de LDAP</mark>

* <mark style="color:green;">**Protocolo**</mark><mark style="color:green;">:</mark> LDAP es un protocolo basado en TCP/IP que proporciona un método estándar para acceder y gestionar directorios distribuidos.
* <mark style="color:green;">**Puerto**</mark><mark style="color:green;">:</mark> El puerto 389 es el puerto estándar para LDAP en comunicaciones no cifradas.
* <mark style="color:green;">**Funcionalidad**</mark><mark style="color:green;">:</mark> LDAP permite realizar operaciones como la búsqueda, modificación y eliminación de entradas en un directorio. Es esencial para la autenticación y autorización en muchas aplicaciones empresariales y servicios de red.
* <mark style="color:green;">**Autenticación y Cifrado**</mark><mark style="color:green;">:</mark> Aunque LDAP sobre el puerto 389 no utiliza cifrado por defecto, puede configurarse para usar STARTTLS para asegurar las comunicaciones. Para conexiones seguras, se utiliza LDAPS sobre el puerto 636.

## <mark style="color:green;">Relevancia en Pentesting</mark>

### <mark style="color:green;">**Importancia de LDAP en Pentesting**</mark><mark style="color:green;">:</mark>

* <mark style="color:green;">**Enumeración de Usuarios y Grupos**</mark><mark style="color:green;">:</mark> Los pentesters utilizan LDAP para enumerar usuarios, grupos y otros objetos en el directorio, lo que puede proporcionar información crítica para la fase de reconocimiento.
* <mark style="color:green;">**Autenticación y Autorización**</mark><mark style="color:green;">:</mark> LDAP es a menudo una pieza central en la infraestructura de autenticación de una organización, y las debilidades en su configuración pueden permitir el acceso no autorizado.
* <mark style="color:green;">**Configuraciones Inseguras**</mark><mark style="color:green;">:</mark> La falta de cifrado y configuraciones de acceso inapropiadas pueden exponer información sensible. Los pentesters buscan configuraciones de enlace anónimo y otras configuraciones inseguras que puedan ser explotadas.

## <mark style="color:green;">Ejemplo de Escaneo de LDAP con Nmap</mark>

Para identificar servidores LDAP activos y recopilar información adicional sobre los servicios LDAP, se puede utilizar Nmap con scripts NSE específicos.

### <mark style="color:green;">**Comando Nmap**</mark>

```bash
nmap -p 389 --script ldap-rootdse,ldap-search,ldap-novell-getpass target-ip
```

### <mark style="color:green;">**Explicación del Comando**</mark>

* `nmap`: Ejecuta el comando Nmap.
* `-p 389`: Especifica que Nmap debe escanear el puerto 389, el puerto predeterminado para LDAP.
* `--script ldap-rootdse,ldap-search,ldap-novell-getpass`: Utiliza scripts NSE para detectar configuraciones y vulnerabilidades en el servicio LDAP.
  * `ldap-rootdse`: Recupera información del Root DSE (DSA-Specific Entry), que proporciona detalles sobre el servidor LDAP.
  * `ldap-search`: Realiza búsquedas LDAP en el servidor.
  * `ldap-novell-getpass`: Intenta recuperar contraseñas de usuarios en servidores Novell LDAP.
* `target-ip`: Especifica la dirección IP del objetivo.

## <mark style="color:green;">**Ejemplo de Salida de Nmap**</mark>

```plaintext
Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-18 22:30 UTC
Nmap scan report for 192.168.1.200
Host is up (0.0021s latency).

PORT    STATE SERVICE
389/tcp open  ldap
| ldap-rootdse: 
|   LDAP Responses: 
|     currentTime: 20240518223000Z
|     subschemaSubentry: cn=Subschema
|     dsServiceName: cn=Directory Service,cn=Windows NT,c=US
|     namingContexts: DC=example,DC=com
|     defaultNamingContext: DC=example,DC=com
|     schemaNamingContext: CN=Schema,CN=Configuration,DC=example,DC=com
|     configurationNamingContext: CN=Configuration,DC=example,DC=com
|     rootDomainNamingContext: DC=example,DC=com
|     supportedLDAPVersion: 3
|     supportedLDAPVersion: 2
|     supportedControl: 1.2.840.113556.1.4.319
|     supportedControl: 1.2.840.113556.1.4.801
|_    supportedExtension: 1.3.6.1.4.1.1466.20037
| ldap-search:
|   Context: DC=example,DC=com
|     dn: DC=example,DC=com
|       dc: example
|       objectClass: top
|       objectClass: domain
|       distinguishedName: DC=example,DC=com
|     dn: CN=Users,DC=example,DC=com
|       cn: Users
|       objectClass: top
|       objectClass: container
|       distinguishedName: CN=Users,DC=example,DC=com
|     dn: CN=John Doe,CN=Users,DC=example,DC=com
|       cn: John Doe
|       sn: Doe
|       givenName: John
|       objectClass: top
|       objectClass: person
|       objectClass: organizationalPerson
|       objectClass: user
|       distinguishedName: CN=John Doe,CN=Users,DC=example,DC=com
| ldap-novell-getpass: 
|   Account 'admin' has password 'password123' (plaintext)
|_  Accounts found: 1

Nmap done: 1 IP address (1 host up) scanned in 10.23 seconds
```

## <mark style="color:green;">Interpretación de la Salida</mark>

* <mark style="color:green;">**Host is up**</mark><mark style="color:green;">:</mark> Indica que el sistema objetivo está en línea y responde.
* <mark style="color:green;">**389/tcp open ldap**</mark><mark style="color:green;">:</mark> El puerto 389 está abierto y el servicio LDAP está activo.
* <mark style="color:green;">**ldap-rootdse**</mark><mark style="color:green;">:</mark> Recupera información del Root DSE, que proporciona detalles sobre la configuración del servidor LDAP.
  * <mark style="color:green;">**currentTime**</mark><mark style="color:green;">:</mark> Hora actual del servidor LDAP.
  * <mark style="color:green;">**namingContexts**</mark><mark style="color:green;">:</mark> Contextos de nombres disponibles en el servidor (e.g., `DC=example,DC=com`).
  * <mark style="color:green;">**supportedLDAPVersion**</mark><mark style="color:green;">:</mark> Versiones de LDAP soportadas (v2 y v3).
* <mark style="color:green;">**ldap-search**</mark><mark style="color:green;">:</mark> Realiza una búsqueda LDAP en el contexto `DC=example,DC=com`.
  * <mark style="color:green;">**dn: DC=example,DC=com**</mark><mark style="color:green;">:</mark> Entrada de directorio para el dominio `example.com`.
  * <mark style="color:green;">**dn: CN=Users,DC=example,DC=com**</mark><mark style="color:green;">:</mark> Contenedor de usuarios.
  * <mark style="color:green;">**dn: CN=John Doe,CN=Users,DC=example,DC=com**</mark><mark style="color:green;">:</mark> Entrada de usuario para `John Doe`.
* <mark style="color:green;">**ldap-novell-getpass**</mark><mark style="color:green;">:</mark> Intenta recuperar contraseñas de usuarios en servidores Novell LDAP.
  * <mark style="color:green;">**Account 'admin' has password 'password123' (plaintext)**</mark><mark style="color:green;">:</mark> Indica que la cuenta `admin` tiene la contraseña `password123` en texto plano.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://books.spartan-cybersec.com/cppj/networking-for-juniors/puertos-y-servicios/puerto-389-ldap.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
