JenkHack - DockerLabs
| OS | Dificultad | Creator |
|---|---|---|
| Linux | F谩cil | d1se0 |
Reconocimiento
Comenzamos el proceso de reconocimiento identificando los puertos abiertos en el sistema objetivo.
sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG ports
-p-: Escanea todos los puertos (1-65535).--open: Solo muestra los puertos abiertos.-sS: Realiza un escaneo SYN, que es r谩pido y discreto.--min-rate=5000: Env铆a al menos 5000 paquetes por segundo, acelerando el escaneo.-n: No realiza resoluci贸n DNS.-Pn: No realiza ping previo para determinar si el host est谩 activo.-vvv: Muestra resultados detallados y en tiempo real.
Puertos Descubiertos
Durante el escaneo, descubrimos los siguientes puertos abiertos:
80(HTTP)443(HTTPS)8080(Http-Proxy)
Realizamos un escaneo m谩s detallado para obtener informaci贸n sobre los servicios en estos puertos:
nmap -p443,80,8080 -sCV 172.17.0.2 -oG targeted
Exploraci贸n Web
Sitio en el puerto 80
En el puerto 80 encontramos una p谩gina que parece ser un blog informativo:
No se observa informaci贸n relevante a simple vista, pero menciona el servicio Jenkins, que previamente identificamos en el puerto 8080.
Enumeraci贸n de directorios
Para investigar m谩s, utilizamos Gobuster para explorar directorios:
gobuster dir -u http://172.17.0.2 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,doc,html,txt,img
gobuster dir: Realiza un escaneo de directorios.-u http://172.17.0.2/: URL objetivo.-w: Diccionario a utilizar.-x: Extensiones de archivo para buscar.
No encontramos nada relevante en el puerto 80, as铆 que procedemos a investigar el puerto 8080, donde encontramos un panel de inicio de sesi贸n de Jenkins:
Credenciales descubiertas
En el c贸digo fuente del sitio en el puerto 80 encontramos dos palabras clave ocultas:
- jenkins-admin
- cassandra
Probamos estas credenciales en el panel de Jenkins:
Acceso al panel de Jenkins
Con las credenciales obtenidas, accedemos al panel de Jenkins:
Ejecuci贸n Remota de C贸digo (RCE)
Utilizamos un RCE a trav茅s de Groovy Script, siguiendo la gu铆a de HackTricks.
Simult谩neamente, escuchamos en el puerto 4444 con netcat. Una vez ejecutado el script, obtenemos acceso:
Escalaci贸n de Privilegios
Configuraci贸n de una TTY interactiva
Iniciar una sesi贸n interactiva
Ejecutamos el siguiente comando en nuestra shell para forzar una sesi贸n interactiva:
script /dev/null -c bash
Suspender la shell
Usamos Control+Z para suspender temporalmente nuestra sesi贸n.
Configurar el terminal local
En nuestro terminal local ejecutamos:
stty raw -echo; fg
Resetear el terminal
Dentro de la shell interactiva, reseteamos la configuraci贸n:
reset
Configurar el tipo de terminal
Finalmente, configuramos las variables necesarias:
export TERM=xterm
export SHELL=bash
Informaci贸n Cr铆tica en el Sistema
Utilizamos linpeas.sh para buscar posibles vectores de escalaci贸n. Descubrimos un archivo note.txt en el directorio del usuario jenkhack:
El archivo contiene lo siguiente:
jenkhack:C1V9uBl8!'Ci*`uDfP
Este texto parece una contrase帽a cifrada. Usamos CyberChef para descifrarla:
Descubrimos que est谩 en Base85 y la contrase帽a descifrada es:
jenkinselmejor
Accedemos al usuario jenkhack:
su jenhack
Escalaci贸n a Root
Ejecutamos sudo -l y verificamos que podemos ejecutar bash como root:
sudo /usr/local/bin/bash -p
Modificando el Script de Bash
El script ejecuta comandos desde una ruta en /opt. Editamos este script para cambiar los permisos de bash, otorg谩ndole el bit SUID:
chmod u+s /bin/bash
Asignamos permisos al script:
chmod +x bash.sh
Si aparece el mensaje de 茅xito, significa que el script est谩 funcionando correctamente:
Finalmente, ejecutamos el siguiente comando para obtener acceso root:
sudo /bin/bash -p
隆Ahora somos root!