hacktricks/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens
2024-07-30 11:11:09 +00:00
..
abuse-seloaddriverprivilege.md Translated ['ctf-write-ups/challenge-0521.intigriti.io.md', 'ctf-write-u 2024-02-07 04:39:01 +00:00
README.md Translated ['windows-hardening/windows-local-privilege-escalation/privil 2024-07-30 11:11:09 +00:00

Abusing Tokens

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Tokens

Si no sabes qué son los Tokens de Acceso de Windows, lee esta página antes de continuar:

{% content-ref url="../access-tokens.md" %} access-tokens.md {% endcontent-ref %}

Quizás podrías escalar privilegios abusando de los tokens que ya tienes

SeImpersonatePrivilege

Este es un privilegio que posee cualquier proceso que permite la suplantación (pero no la creación) de cualquier token, dado que se puede obtener un identificador para ello. Un token privilegiado puede ser adquirido de un servicio de Windows (DCOM) induciéndolo a realizar autenticación NTLM contra un exploit, lo que posteriormente permite la ejecución de un proceso con privilegios de SYSTEM. Esta vulnerabilidad puede ser explotada utilizando varias herramientas, como juicy-potato, RogueWinRM (que requiere que winrm esté deshabilitado), SweetPotato, EfsPotato, DCOMPotato y PrintSpoofer.

{% content-ref url="../roguepotato-and-printspoofer.md" %} roguepotato-and-printspoofer.md {% endcontent-ref %}

{% content-ref url="../juicypotato.md" %} juicypotato.md {% endcontent-ref %}

SeAssignPrimaryPrivilege

Es muy similar a SeImpersonatePrivilege, utilizará el mismo método para obtener un token privilegiado.
Luego, este privilegio permite asignar un token primario a un proceso nuevo/suspendido. Con el token de suplantación privilegiado puedes derivar un token primario (DuplicateTokenEx).
Con el token, puedes crear un nuevo proceso con 'CreateProcessAsUser' o crear un proceso suspendido y establecer el token (en general, no puedes modificar el token primario de un proceso en ejecución).

SeTcbPrivilege

Si tienes habilitado este token puedes usar KERB_S4U_LOGON para obtener un token de suplantación para cualquier otro usuario sin conocer las credenciales, agregar un grupo arbitrario (administradores) al token, establecer el nivel de integridad del token en "medio", y asignar este token al hilo actual (SetThreadToken).

SeBackupPrivilege

El sistema se ve obligado a otorgar todo el acceso de lectura a cualquier archivo (limitado a operaciones de lectura) por este privilegio. Se utiliza para leer los hashes de contraseñas de cuentas de Administrador local desde el registro, después de lo cual, herramientas como "psexec" o "wmiexec" pueden ser utilizadas con el hash (técnica Pass-the-Hash). Sin embargo, esta técnica falla bajo dos condiciones: cuando la cuenta de Administrador local está deshabilitada, o cuando hay una política que elimina los derechos administrativos de los Administradores locales que se conectan de forma remota.
Puedes abusar de este privilegio con:

{% content-ref url="../../active-directory-methodology/privileged-groups-and-token-privileges.md" %} privileged-groups-and-token-privileges.md {% endcontent-ref %}

SeRestorePrivilege

Este privilegio otorga permiso para acceso de escritura a cualquier archivo del sistema, independientemente de la Lista de Control de Acceso (ACL) del archivo. Abre numerosas posibilidades para la escalación, incluyendo la capacidad de modificar servicios, realizar DLL Hijacking, y establecer depuradores a través de Opciones de Ejecución de Archivos de Imagen, entre varias otras técnicas.

SeCreateTokenPrivilege

SeCreateTokenPrivilege es un permiso poderoso, especialmente útil cuando un usuario posee la capacidad de suplantar tokens, pero también en ausencia de SeImpersonatePrivilege. Esta capacidad depende de la habilidad de suplantar un token que representa al mismo usuario y cuyo nivel de integridad no excede el del proceso actual.

Puntos Clave:

  • Suplantación sin SeImpersonatePrivilege: Es posible aprovechar SeCreateTokenPrivilege para EoP al suplantar tokens bajo condiciones específicas.
  • Condiciones para la Suplantación de Tokens: La suplantación exitosa requiere que el token objetivo pertenezca al mismo usuario y tenga un nivel de integridad que sea menor o igual al nivel de integridad del proceso que intenta la suplantación.
  • Creación y Modificación de Tokens de Suplantación: Los usuarios pueden crear un token de suplantación y mejorarlo agregando un SID (Identificador de Seguridad) de un grupo privilegiado.

SeLoadDriverPrivilege

Este privilegio permite cargar y descargar controladores de dispositivos con la creación de una entrada en el registro con valores específicos para ImagePath y Type. Dado que el acceso de escritura directo a HKLM (HKEY_LOCAL_MACHINE) está restringido, se debe utilizar HKCU (HKEY_CURRENT_USER) en su lugar. Sin embargo, para que HKCU sea reconocible por el núcleo para la configuración del controlador, se debe seguir una ruta específica.

Esta ruta es \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName, donde <RID> es el Identificador Relativo del usuario actual. Dentro de HKCU, se debe crear toda esta ruta, y se deben establecer dos valores:

  • ImagePath, que es la ruta al binario que se va a ejecutar
  • Type, con un valor de SERVICE_KERNEL_DRIVER (0x00000001).

Pasos a Seguir:

  1. Acceder a HKCU en lugar de HKLM debido al acceso de escritura restringido.
  2. Crear la ruta \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName dentro de HKCU, donde <RID> representa el Identificador Relativo del usuario actual.
  3. Establecer el ImagePath a la ruta de ejecución del binario.
  4. Asignar el Type como SERVICE_KERNEL_DRIVER (0x00000001).
# Example Python code to set the registry values
import winreg as reg

# Define the path and values
path = r'Software\YourPath\System\CurrentControlSet\Services\DriverName' # Adjust 'YourPath' as needed
key = reg.OpenKey(reg.HKEY_CURRENT_USER, path, 0, reg.KEY_WRITE)
reg.SetValueEx(key, "ImagePath", 0, reg.REG_SZ, "path_to_binary")
reg.SetValueEx(key, "Type", 0, reg.REG_DWORD, 0x00000001)
reg.CloseKey(key)

Más formas de abusar de este privilegio en https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege

SeTakeOwnershipPrivilege

Esto es similar a SeRestorePrivilege. Su función principal permite que un proceso asuma la propiedad de un objeto, eludiendo el requisito de acceso discrecional explícito a través de la provisión de derechos de acceso WRITE_OWNER. El proceso implica primero asegurar la propiedad de la clave de registro destinada para fines de escritura, y luego alterar el DACL para habilitar las operaciones de escritura.

takeown /f 'C:\some\file.txt' #Now the file is owned by you
icacls 'C:\some\file.txt' /grant <your_username>:F #Now you have full access
# Use this with files that might contain credentials such as
%WINDIR%\repair\sam
%WINDIR%\repair\system
%WINDIR%\repair\software
%WINDIR%\repair\security
%WINDIR%\system32\config\security.sav
%WINDIR%\system32\config\software.sav
%WINDIR%\system32\config\system.sav
%WINDIR%\system32\config\SecEvent.Evt
%WINDIR%\system32\config\default.sav
c:\inetpub\wwwwroot\web.config

SeDebugPrivilege

Este privilegio permite depurar otros procesos, incluyendo leer y escribir en la memoria. Se pueden emplear varias estrategias para la inyección de memoria, capaces de evadir la mayoría de las soluciones antivirus y de prevención de intrusiones en host, con este privilegio.

Volcar memoria

Puedes usar ProcDump de la SysInternals Suite para capturar la memoria de un proceso. Específicamente, esto puede aplicarse al proceso de Local Security Authority Subsystem Service (LSASS), que es responsable de almacenar las credenciales de usuario una vez que un usuario ha iniciado sesión con éxito en un sistema.

Luego puedes cargar este volcado en mimikatz para obtener contraseñas:

mimikatz.exe
mimikatz # log
mimikatz # sekurlsa::minidump lsass.dmp
mimikatz # sekurlsa::logonpasswords

RCE

Si quieres obtener un shell de NT SYSTEM, podrías usar:

# Get the PID of a process running as NT SYSTEM
import-module psgetsys.ps1; [MyProcess]::CreateProcessFromParent(<system_pid>,<command_to_execute>)

Verificar privilegios

whoami /priv

Los tokens que aparecen como Deshabilitados pueden ser habilitados, en realidad puedes abusar de los tokens Habilitados y Deshabilitados.

Habilitar Todos los tokens

Si tienes tokens deshabilitados, puedes usar el script EnableAllTokenPrivs.ps1 para habilitar todos los tokens:

.\EnableAllTokenPrivs.ps1
whoami /priv

Or the script embed in this post.

Table

Full token privileges cheatsheet at https://github.com/gtworek/Priv2Admin, summary below will only list direct ways to exploit the privilege to obtain an admin session or read sensitive files.

Privilege Impact Tool Execution path Remarks
SeAssignPrimaryToken Admin 3rd party tool "Permitiría a un usuario impersonar tokens y escalar privilegios al sistema nt utilizando herramientas como potato.exe, rottenpotato.exe y juicypotato.exe" Gracias Aurélien Chalot por la actualización. Intentaré reformularlo a algo más parecido a una receta pronto.
SeBackup Threat Built-in commands Leer archivos sensibles con robocopy /b

- Puede ser más interesante si puedes leer %WINDIR%\MEMORY.DMP

- SeBackupPrivilege (y robocopy) no son útiles cuando se trata de archivos abiertos.

- Robocopy requiere tanto SeBackup como SeRestore para trabajar con el parámetro /b.

SeCreateToken Admin 3rd party tool Crear un token arbitrario que incluya derechos de administrador local con NtCreateToken.
SeDebug Admin PowerShell Duplicar el token de lsass.exe. Script disponible en FuzzySecurity
SeLoadDriver Admin 3rd party tool

1. Cargar un controlador de kernel con errores como szkg64.sys
2. Explotar la vulnerabilidad del controlador

Alternativamente, el privilegio puede usarse para descargar controladores relacionados con la seguridad con el comando incorporado ftlMC. es decir: fltMC sysmondrv

1. La vulnerabilidad de szkg64 está listada como CVE-2018-15732
2. El szkg64 código de explotación fue creado por Parvez Anwar

SeRestore Admin PowerShell

1. Iniciar PowerShell/ISE con el privilegio SeRestore presente.
2. Habilitar el privilegio con Enable-SeRestorePrivilege).
3. Renombrar utilman.exe a utilman.old
4. Renombrar cmd.exe a utilman.exe
5. Bloquear la consola y presionar Win+U

El ataque puede ser detectado por algún software antivirus.

El método alternativo se basa en reemplazar los binarios de servicio almacenados en "Program Files" utilizando el mismo privilegio

SeTakeOwnership Admin Built-in commands

1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. Renombrar cmd.exe a utilman.exe
4. Bloquear la consola y presionar Win+U

El ataque puede ser detectado por algún software antivirus.

El método alternativo se basa en reemplazar los binarios de servicio almacenados en "Program Files" utilizando el mismo privilegio.

SeTcb Admin 3rd party tool

Manipular tokens para incluir derechos de administrador local. Puede requerir SeImpersonate.

Por verificar.

Reference

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}