# 4. Local Privilege Escalation Part 1 Centrandonos en los problemas con los servicios y escalada de privilegios locales. Si eliminamos el secuestro de dll, los problemas de servicio se pueden clasificar en 3 tipos: ### Get services with unquoted paths and a space in their name ``` Get-ServiceUnquoted -Verbose ``` Vulnerabilidad de la ruta sin comillas, donde el bin path del servicio usa una ruta codificada y hay un espacio en el nombre que nos permite colocar un ejecutable. Hay servicios donde podemos modificar su ruta binaria o cambiar los argumentos para que alteremos su funcionalidad. Podemos verificar los permisos de los servicios, si en caso estos no están configurados correctamente y si hay una opción para cambiar las propiedades interesantes del servicio. - Para ver todas las rutas de todos los servicios ``` Get-wmiObject -Class win32_service | fl * Get-wmiObject -Class win32_service | select pathname ``` ![](https://i.imgur.com/z7RyJX8.png) ### Get services where the current user can write to its binary path or change arguments to the binary ``` Get-ModifiableServiceFile -Verbose ``` Esto consiste en obtener o recuperar servicios donde el usuario actual puede anular su binario o cambiar los argumentos ### Get the services whose configuration current user can modify ``` Get-ModifiableServiceFile -Verbose ``` Consiste en modificar el servicio en sí mismo y hacer que apunte temporalmente a otro ejecutable, esto es posible con suficientes permisos en el servicio. ## Herramientas a usar - PowerUp ``` Invoke-AllChecks ``` - BeRoot ``` .\beRoot.exe ``` - Privesc ``` Invoke-PrivEsc ``` ## POC ### PowerUP ~~~ .\PowerUp.ps1 Invoke-AllChecks ~~~ ![](https://i.imgur.com/LSTxAKL.png) Hay un espacio en el Path Algo a tener en cuenta con la vulnerabilidad de las comillas es que el servicio se ejecuta con LocalSystem, privilegios mas altos, esto se ve en: StartName : LocalSystem Lo segundo es que debemos tener la capacidad para reiniciar el servicio a nuestra voluntad, aunque también es puede esperar que alguien reinicie este mismo: CanRestart : True ~~~ Get-WmiObject -Class win32_service | select pathname ~~~ Falso positivo: ![](https://i.imgur.com/naMTNUz.png) Puesto que se necesita crear un Program.exe en la ruta C:\, lo cual no es posible puesto que se necesitan privilegios administrativos. También se puede modificar el ejecutable `abyssws.exe` debido a que tenemos permisos de modificación en el path. ![](https://i.imgur.com/psPdxxV.png) O también podemos tener permisos para cambiar el path del servicio AbysswebServer, es decir, hacer que el servicio apunte a otro ejecutable ![](https://i.imgur.com/lt3rQlG.png) ### beRoot ``` .\beRoot.exe ``` Primero verifica los servicios cuya configuración podría modificarse: ![](https://i.imgur.com/hpnKNmo.png) También una ruta de escritura sin comillas: ![](https://i.imgur.com/V6217zh.png) Y por último, el binario se encuentra ubicado en un directorio en el cual tenemos permisos de escritura: ![](https://i.imgur.com/3mR7dX4.png) ### privesc ``` . .\privesc.ps1 Invoke-Privesc ``` ![](https://i.imgur.com/xUfjhOh.png)