Figura 1: Manipulación en memoria de los tokens de servicios Windows |
Sea como sea, existen diversas formas y vías que debemos conocer. También es interesante entender cómo funciona el entorno Windows y sus tokens en memoria. Hoy hablaremos de la manipulación de los tokens en entornos Windows. Es cierto, que siempre podremos utilizar los otros métodos para lograr la escalada, pero una vez lograda ésta, hay que tocar y cambiar los tokens que nos pueden proporcionar acceso a recursos a los que, a priori, no teníamos.
Gestión de Tokens en Windows
En primer lugar, si nos fijamos en los servicios que se ejecutan en un sistema Windows nos encontramos con la cuenta Servicio de red. Esta cuenta tiene un menor privilegio, por lo que, si el proceso es comprometido, no se podrá acceder a datos tan sensibles, como si el proceso se estuviera ejecutando como Administrador o SYSTEM.
Figura 2: Servicio arrancado con la cuenta “Network Service” |
Podemos pasar de un nivel de privilegios proporcionado por Network Service a SYSTEM. Una vez tenemos una sesión sobre la máquina remota, podemos ver con el comando getuid en Meterpreter, a que cuenta pertenece el proceso. Como se ve en la imagen, en este caso, tenemos la cuenta de servicio de red. Con el comando getprivs podemos echar un ojo a los privilegios o acciones que puede realizar el proceso.
Figura 3: Usuario co que corre la sesión de Meterpreter |
Si nos fijamos en los tokens disponibles, en primera instancia no tenemos el token de SYSTEM disponible. El módulo incognito que viene con Metasploit nos permite hacer este listado de tokens y poder manipularlos. Hay otras opciones como el script Invoke-TokenManipulation que viene en Powersploit para Powershell.
Figura 4: Powersploit en GitHub |
En este punto podríamos intentar buscar una vulnerabilidad o aprovecharnos de las técnicas conocidas o tricks para lograr ejecutar código en un contexto de SYSTEM. Una opción, la cual ya hemos visto en el pasado con Tater, es utilizar RottenPotato.
Figura 5: Listado de tokens disponibles |
La idea es sencilla y podríamos hacerlo a través de Tater u otra vulnerabilidad, debilidad o trick que pueda afectar y permitir la elevación de privilegio en Windows. En este caso, utilizamos RottenPotato con el objetivo de lograr la escalada. Si hiciéramos un listado de tokens disponibles aparecería el de SYSTEM y podríamos impersonalizarle.
Figura 6: RottenPotato en GitHub |
Por último, nos quedaría lanzar el comando execute –f –Hc, dónde –f indica la ruta al binario y –H indica que el proceso se ejecutará de forma oculta.
Figura 7: Subida del exploit de Rottenpotato |
Otro ejemplo, sería si un servicio se ejecuta como administrador de la máquina. Es un caso, prácticamente ideal, ya que tenemos todo lo necesario para ejecutar un getsystem y obtener el token de SYSTEM, ya que lo podríamos impersonalizar por permisos.
Figura 8: Servicio corriendo como Administrador |
De nuevo, utilizando el módulo incognito listamos los tokens disponibles y podemos observar que SYSTEM se encuentra entre ellos. Utilizando el comando impersonate_token podemos impersonalizar al usuario SYSTEM. Este comando es similar a utilizar la opción getsystem, famosa en Metasploit. Este escenario es un caso muy favorable para el pentester y que radica en un fallo de configuración o en una debilidad, aunque en escenarios como un SQL Server dónde se permite nos lo podemos encontrar en un proyecto de ethical hacking real.
Figura 9: Elevación a SYSTEM |
Os dejamos un video resumiendo este escenario y la facilidad para conseguir la manipulación de tokens debido al uso de estas herramientas. Técnicas y herramientas a tener a mano en el día a día para hacer pentesting.
En el vídeo tienes un ejemplo completo de todo lo explicado en este artículo, para que lo puedas ver funcionando.
FUENTE