# SecretJenkins

### 🔍 RECONOCIMIENTO

En primer lugar, tras conectarnos a la máquina, utilizamos el comando:

```bash
ping -c 1 172.17.0.2
```

para verificar la conectividad de red.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FYHm1n5MmXkbOZ8efhIcT%2Fimage.png?alt=media&#x26;token=56f4360c-d66b-4b20-992e-f9067c1054b7" alt=""><figcaption></figcaption></figure>

A continuación, realizamos el comando:

```bash
nmap -sVC -p- -n --min-rate 5000 172.17.0.2
```

para realizar un escaneo de puertos y servicios detallado en la dirección IP.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FmrUe30UDnY8bTvk92jPQ%2Fimage.png?alt=media&#x26;token=69ac9137-e26b-4798-a298-9786cb808344" alt=""><figcaption></figcaption></figure>

Como podemos observar durante el escaneo que el **puerto 22** perteneciente al **servicio SSH** y el **puerto 8080** perteneciente al **servicio HTTP** están abiertos por lo que a continuación se indagará más.

### 🔎 EXPLORACIÓN

Se utiliza el comando:

```bash
sudo nmap -sCV -p22,80 -v 172.17.0.2
```

para que nos proporcione más información sobre esos puertos específicamente.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FvLzKPIiiHWoPn8EbMMrR%2Fimage.png?alt=media&#x26;token=a616fdd4-2d33-4299-ac2d-256d2195834b" alt=""><figcaption></figcaption></figure>

Seguimos indagando más sobre los puertos y ahora indagamos sobre el **servicio HTTP**. Se ingresó la **dirección IP** en el navegador lo que llevó a que la página web sea un panel de **Login**.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FngiwCBujo1eXuTKjqJnN%2Fimage.png?alt=media&#x26;token=bd079fa4-d187-4e43-9527-f5df5d97f318" alt=""><figcaption></figcaption></figure>

Revisando el código fuente no encontramos nada relevante.

Ahora buscaremos directorios con la herramienta **Gobuster** a través de:

```bash
gobuster dir -u http://172.17.0.2:8080/ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt
```

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FHz9w79GfSZitJFRwAfB7%2Fimage.png?alt=media&#x26;token=8b6f0d34-2208-4308-a261-db312c5885f5" alt=""><figcaption></figcaption></figure>

Podemos probar accediendo a ciertos recursos que nos proporcionan respuestas útiles. Por ejemplo, en la sección `/people` podemos observar tanto la versión en la parte inferior como varias opciones de botones.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2Fc52I8BFAdyCz8YFfdAim%2Fimage.png?alt=media&#x26;token=2a2361a4-5646-4906-a690-ff9a119ae593" alt=""><figcaption></figcaption></figure>

Al hacer clic en el botón **people**, se muestra información sobre dos posibles usuarios.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FQg7x19TdttpED0eWRAcU%2Fimage.png?alt=media&#x26;token=3c60ed97-2d54-4352-8523-833fbcee9779" alt=""><figcaption></figcaption></figure>

Probamos con credenciales genéricas para ambos usuarios, pero no pudimos acceder. Dado que tenemos la versión del sistema, buscamos algún exploit que podamos utilizar. Encontramos varias opciones en Google.

Para esta ocasión, utilizaremos un exploit disponible en [Exploit-DB](https://www.exploit-db.com/exploits/51993). Descargamos el archivo `.py` correspondiente, lo ejecutamos y logramos obtener la información del archivo que estábamos buscando.

```bash
python3 script.py -u http://172.17.0.2:8080 -p /etc/passwd
```

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FDK87UlqeRbqiBcrAeAyk%2Fimage.png?alt=media&#x26;token=cd27e88e-c661-4e27-8ea3-9c7ccd2744eb" alt=""><figcaption></figcaption></figure>

Sabemos que tenemos la capacidad de leer archivos. En este caso, buscaremos las credenciales de los usuarios de Jenkins leyendo el archivo `/var/jenkins_home/users/users.xml`. Este archivo contiene información sobre los usuarios creados, incluidas las credenciales, permisos y roles asociados. Al ejecutar el comando para leer este archivo, podremos observar el ID de los usuarios.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FVLL3sCgWDedMBbe9etKB%2Fimage.png?alt=media&#x26;token=fe3b819e-618b-4cc0-8dbf-e969c86eed46" alt=""><figcaption></figcaption></figure>

Una vez que tenemos el identificador del usuario, podemos aprovecharlo para acceder a su archivo de configuración, donde se encuentra su contraseña en formato hash. El archivo está ubicado en el directorio `/var/jenkins_home/users/admin_4715893701316860439/config.xml.` Al ejecutar el exploit, conseguimos obtener el `passwordHash`.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FkX6oY8i59jaVkU4MS09J%2Fimage.png?alt=media&#x26;token=107bfb22-1176-40e6-b3c3-eb37d19fb44c" alt=""><figcaption></figcaption></figure>

Para romper el hash, guardamos el valor en un archivo llamado `hash`. Intentamos obtener la contraseña, pero no tuvimos éxito, ya que no se encuentra en el diccionario utilizado.

Con **john** no se puede por lo que probamos por **SSH** con el usuario **bobby**.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FaUu4Dxjkbavjaiw7bUja%2Fimage.png?alt=media&#x26;token=04925198-c65a-4838-bde8-48de34233b14" alt=""><figcaption></figcaption></figure>

### 🚀 **EXPLOTACIÓN**

Con la información obtenida anteriormente, realizamos el comando:

```bash
hydra -l bobby -P /usr/share/wordlists/rockyou.txt ssh://172.17.0.2 -t 5
```

que utiliza la herramienta **Hydra** para realizar un ataque de fuerza bruta contra el servicio **SSH** de una máquina con la IP **172.17.0.2**.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2F7OpZvtTq6HSyyYkNQ66O%2Fimage.png?alt=media&#x26;token=2fe4da45-dbe3-45d5-9370-242a1dc20021" alt=""><figcaption></figcaption></figure>

Al realizar el ataque de fuerza bruta, hemos descubierto la contraseña de **russoski**. Sabiendo esto, nos conectamos a través de **SSH** al usuario con el comando:

```bash
ssh bobby@172.17.0.2
```

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FU3yoSzD72N6IixnHLEKQ%2Fimage.png?alt=media&#x26;token=b5ea10d0-b420-4069-828f-01adc5f3fbe5" alt=""><figcaption></figcaption></figure>

### 🔐 **PRIVILEGIOS**

Al estar dentro y ejecutar:

```bash
whoami
```

aún no somos **root**, por lo que hacemos:

```bash
sudo -l
```

para ver si hay algo para explotar.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FO63dEgVHYPXn1Jbj5CcB%2Fimage.png?alt=media&#x26;token=80f7cc4e-59f3-4529-8b84-ec09880ebc35" alt=""><figcaption></figcaption></figure>

Para aprovechar esta situación, visitamos la página de [GTFOBins](https://gtfobins.github.io/gtfobins/python/#sudo) y buscamos la entrada correspondiente a Python. Encontramos un código en la sección de `sudo` que podemos ejecutar, aunque es importante considerar ciertas modificaciones, ya que no es para obtener acceso root directamente.

Antes de ejecutar el comando completo, es necesario agregar la opción `-u pinguinito`, ya que los permisos están asignados a ese usuario. Si ingresamos el comando correctamente, podremos confirmar que hemos cambiado al usuario `pinguinito`.

```bash
sudo -u pinguinito python3 -c 'import os; os.system("/bin/sh")'
```

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FWcpWlGqYm4t6ChgbG7CO%2Fimage.png?alt=media&#x26;token=4fcd7745-4e15-40b9-8436-37063b1059ef" alt=""><figcaption></figcaption></figure>

Al inspeccionar el script, verificamos que somos los propietarios del archivo, y además, este tiene permisos de lectura y ejecución. Al abrir el archivo, descubrimos que su función principal es copiar `/opt/script.py` al directorio `/tmp` bajo el nombre `script_backup.py`, seguido de un mensaje que confirma la copia exitosa.

Dado que somos los propietarios, intentamos agregar permisos de escritura al script. Este cambio se realizó correctamente, lo que nos brinda la oportunidad de aprovecharlo para realizar modificaciones adicionales.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FsyreT76pMFSYoBZrKSWm%2Fimage.png?alt=media&#x26;token=2df292fc-7ef0-4f44-bf90-e500343d73c1" alt=""><figcaption></figcaption></figure>

```bash
chmod +w /opt/script.py
```

Modificamos el archivo para que podamos tener acceso a una nueva **shell**.

```bash
echo 'import os; os.system("/bin/sh")' > /opt/script.py
```

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FR4AYTSWE5qAiF4tZUf5p%2Fimage.png?alt=media&#x26;token=16496943-1ad8-4a78-b2bd-3178266e72e0" alt=""><figcaption></figcaption></figure>

Ya tenemos acceso como **root** por lo que tenemos los máximos privilegios.
