Hola estimada persona, ¿Qué te parece un CTF? Pero antes....
Gracias a d4t4s3c, por compartir este CTF y a la comunidad de Vulnyx, por hacer esto posible 😃
Descripción de la maquina.
Sistema Operativo | Linux 🐧 |
Dificultad | Medio |
Lanzamiento | 22/10/2021 |
Creador | |
Primer Usuario | |
Primer Root |
Enumeración
Empezamos con un par de escaneos, obteniendo los puertos abiertos, servicios y algunas versiones.
Empecemos por observar el servicio apache.
Bueno, solo obtenemos la bienvenida de un apache default page.
Realice un fuzzing
bajo este directorio, pero ya te digo que por el momento no hay algo que nos interese, por ahora....
Así que pasemos con el otro servicio, alojado en el puerto 8080...
El señor Jenkins. Tenemos un panel en el cual no podemos hacer casi nada... Solo obtuve el nombre de un usuario george
, con el cual me dispuse a realizar una fuerza bruta con hydra
al login de Jenkins.
hydra -s 8080 192.168.1.131 http-form-post "/j_acegi_security_check:j_username=^USER^&j_password=^PASS^:Invalid username or password" -l george -P /usr/share/wordlists/rockyou.txt -t 10 -w 30
Pero sin éxito 😕
CVE-2024-23897
Ahora, si podrán observar abajo a la derecha tenemos la version de Jenkins.
O también podemos hacer uso de whatweb
para afirmar.
El punto es que podemos buscar alguna vulnerabilidad conocida sobre Jenkins, y si, fue el caso. Di con un repositorio de Github que mantiene una notas sobre las vulnerabilidades descubiertas con PoC 🙂
Una de estas es CVE-2024-23897, la cual permite que un usuario no autenticado pueda realizar una lectura de archivos del sistema controlados por Jenkins y la versión 2.401.2 es vulnerable.
Existen algunos exploits en github, aun que podemos hacerlo de manera algo mas manual.
Jenkins CLI
Primero debemos de hacer uso de Jenkins CLI, el cual podemos descargar desde la ruta /jnlpJars/jenkins-cli.jar
wget http://192.168.1.131:8080/jnlpJars/jenkins-cli.jar
Existen dos maneras de aprovecharse de esta vulnerabilidad, una de estas es con credenciales, es decir autenticado y otra, como es mi caso fue sin autenticación.
¿Que te parece ver el /etc/passwd
?
java -jar jenkins-cli.jar -s http://192.168.1.131:8080 -http connect-node "@/etc/passwd"
¿Perfecto no crees? 😃
Bueno, a partir de aquí podemos probar ciertas cosas, como:
Leer archivos base, de los usuario, por ejemplo un
id_rsa
.Leer archivos sensibles de jenkins.
Pero, recordemos que tenemos el servicio apache en el puerto 80, era la pagina por defecto, pero al realizar fuzzing me tope con connect.php
Que de primeras no podemos leerlo, pero con este LFI que tenemos, puede cambiar el asunto.
Interesante ¿no crees?
Intente reutilizar la contraseña en el panel de Jenkins, pero sin éxito. Y dirás, ¿existe algún otro servicio en el cual podemos probar dicha contraseña? No, por ahora...
Aquí esta el otro asunto... Existe la posibilidad que la maquina tenga múltiples interfaces de red 😑, por lo que, en cada una de estas puede alojar diferentes servicios.
Esto nos lleva al archivo /proc/net/if_inet6
el cual aloja las interfaces de red IPv6 con su respectiva IP.
Y justo tiene otra interfaz de red, así que podemos empezar por realizar otro escaneo con nmap
bajo IPv6.
Pero antes hay que darle formato a la IP, con...
https://awebanalysis.com/es/ipv6-compress/
¿Listo? Realizamos escaneo con nmap
.
Ahora, en efecto, tenemos otro servicio donde probar la contraseña de george
el servicio ssh.
ssh -6 george@fe80::a00:27ff:fe10:b560%<interfaz_de_red_en_uso>
Escalada de privilegios
Bueno...
Después de la primera flag, empece por realizar algunas cosas para la escalada.
Permisos sudo
Exploración de permisos en
/
Archivos de servicios
Archivos SUID
Tareas cron
Grupos
Vulnerabilidades en el kernel
Por bastante tiempo pase por desapercibido del binario wkhtmltopdf
que podía ejecutar como root
, mediante los permisos sudo -l
.
¿wkhtmltopdf
?
Buenooo, al ejecutar el binario aparentemente lo que hace es tomar un archivo convertirlo a pdf. De primeras intente buscar alguna vulnerabilidad descubierta, pero nada que me permitiera una escalada.
Así que me dispuse a buscar otras vías... como por ejemplo buscar algo en los procesos con pspy.
Hasta que mire algo curioso.
Pero no pude hacer nada ya que lo ejecuta root
, y no tengo los permisos suficientes.
Al final había olvidado la función de wkhtmltopdf
. Y recordemos que este toma un archivo y lo convierte en un archivo PDF, aun que, podemos ejecutar como root
, es decir que mientras ejecutamos esto, tenemos temporalmente pemisos root...
Por lo tanto puedo tomar archivos de root
.... Por que soy root
no?
sudo /usr/bin/wkhtmltopdf /root/<cualquier_archivo> archivo.pdf
Que tal si probamos con el archivo que estaba usando el usuario root
, cuando observamos los procesos?
Ajaaa, todo parece correcto, vamos a ver que contiene este archivo, así que lo descargare en mi maquina de atacante para verlo mas cómodamente.
Lo descargue con netcat
. Me coloque en escucha
Ahora es tiempo de enviarlo...
Vamos a ver los que nos espera.
Ah buenooo... No perdemos nada con intentarlo....
Bien y eso fue todo, hasta luego estimado lector. Fue un placer.
Referencias