Cuando estamos en un pentesting y tenemos que conseguir el máximo
privilegio en una máquina es importante tener conocimientos sobre las
vulnerabilidades actuales que permitan la elevación de privilegio, por ejemplo
la de MS16-135 o el Hot Potato o Tater, conocer herramientas, como Windows Exploit Suggester, que nos permitan relacionar o matchear
posibles vulnerabilidades que permitan elevar privilegios, técnicas de bypass de UAC o pequeños trucos que debidos a fallos de
configuración puedan acabar permitiendo dicha elevación de privilegio como, por
ejemplo, la de los servicios y la falta de comillas en la
ruta de los binarios.
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.
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.
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.
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.
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.
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.
Por último, nos quedaría lanzar el comando execute –f [ruta al binario] –Hc, dónde –f indica la ruta al
binario y –H indica que el proceso se ejecutará de forma oculta.
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.
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
pentesting real.