Unquoted Service Paths (LAB TryHackme bonus)


Unquoted Service Paths , ¿Qué significa esto?


Los servicios de Windows necesitan la ruta donde se encuentra el ejecutable que va a ser ejecutado por el servicio en sí. Esta ruta puede determinarse mediante la variable de clave binPath/ImagePath del registro y suele estar entrecomillada, lo que permite a Windows localizar la ruta o ubicación del ejecutable, por poner un símil . La siguiente ruta es un ejemplo de una ruta de servicio sin errores:

binPath\ImagePath = «C:\Program Files\test quoted\testingquoted.exe»

Esta ruta funcionaría sin problemas, pero , ¿que pasaría si la ruta no está entrecomillada? , bien , si habéis trabajado con linux o programando podréis encontrar un símil de que no funcionará bien , ya que , al tener espacios en «Archivos de Programa» si no entrecomillamos , este espacio será un «stopper» , es decir, será como si pasáramos una ruta y parámetros , vamos a verlo más granulado como sería.

En este caso , imaginémonos que ahora , como hemos dicho , no tenemos entrecomillada la ruta del servicio, lo que haría windows sería buscar «testingquoted.exe» en todos los directorios y ejecutará todos los ejecutables hasta que localice el ejecutable de destino. Vamos a trabajar con el mismo ejemplo de antes pero sin comillas

binPath\ImagePath = C:\Program Files\test quoted\testingquoted.exe

Las ejecuciones que haría son las siguientes

1.- C:\Program.exe

2.- C:\Program Files\test.exe

3.- C:\Program Files\Testing quoted\testingquoted.exe

Como podemos ver , si alguien nos llega a comprometer y consigue tener permisos para ver los servicios y escribir en disco por ejemplo , puede colocar en ellos un ejecutable malicioso y por ende, si el servicio está configurado para ejecutarse con privilegios administrativos como por ejemplo system , el atacante podría llegar a elevar privilegios y obtener acceso y comprometernos totalmente.

¿Cómo podemos comprobar esto?

Bien el primer paso es identificar la ruta del servicio que no está entre comillas ¿verdad? esto podemos hacerlo utilizando una de las utilidades que nos proporciona nativamente Windows que se llama «Windows Management Instrumentation (wmic)» y esto , unido a la operación findstr podremos hacer un filtrado para revisarlo. Por ejemplo con este comando lo vemos:

wmic service get name,displayname,pathname,startmode |findstr /i /v "c:\" |findstr /i /v """

y veremos algo como esto:

Existe en la comunidad también un script que nos saca automáticamente todos aquellos servicios que se llama PowerUp.ps1

PowerUp.ps1 by PowerSploit


PowerSploit es una colección de módulos de Microsoft PowerShell que pueden utilizarse para realizar pruebas de pentesting a través de cmdlets de powershell etc… , en concreto en este caso haríamos la ejecución del cmdlet «Get-UnquotedService» que se encuentra en el PowerUp.ps1 de este repositorio.

El funcionamiento es muy simple, debemos descargar el script PowerUp.ps1 del repositorio y cargarlo en cargado en powershell, una vez hecho esto , podremos hacer uso del siguiente cmdlet:

Get-UnquotedService

De esta forma, se nos listaría los servicios que cumplan con estos requisitos de tener espacios en blanco en la ruta de servicio (Ojo , si son parámetros no deben de salir)

Podemos descargar el script desde el repositorio de github de Powersploit.

Laboratorio en TryHackme

Después de haber realizado la clase del curso de ciberseguridad de KinoMakino y buscar info de todo esto al respecto , encontré un laboratorio gratuito en TryHackme que está perfecto para conocer todo este tipo de posible escalada de privilegios y «trastear» como funciona , que es cuándo más se aprende:

https://tryhackme.com/room/windowsprivescarena

Nos vemos seguratas!!

Fuentes:

seguridadsi.com – tryhackme.com – systemweakness.com

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *