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

# NodeClimb

✍️ Autor: El Pingüino de Mario🔍 Dificultad: Fácil  📅 Fecha de creación: 05/07/2024

### 🔍 **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%2F0trcWkrWb2oGDxOTLkoM%2Fimage.png?alt=media&amp;token=60129b32-d600-426d-ba9e-f55887f4fcfa" alt=""><figcaption></figcaption></figure>

A continuación, se realiza el comando:

```bash
nmap -p- --open -sT --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG allPorts
```

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%2Fao9nhC7dC4PndSdxxeFk%2Fimage.png?alt=media&amp;token=4b3d2ce6-2711-453a-a4f6-2480f11843ab" alt=""><figcaption></figcaption></figure>

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

### 🔎 **EXPLORACIÓN**

Se utiliza el comando:

```bash
sudo nmap -sCV -p21,22 -v 172.17.0.2
```

para obtener más información sobre ese puerto específicamente.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FoUbD7ZtN2kBObm9OGgEh%2Fimage.png?alt=media&amp;token=8bc14e66-3b44-4252-bef3-71868f7fca87" alt=""><figcaption></figcaption></figure>

Podemos observar que en el **puerto 21** se encuentra un **secretitopicaron.zip** almacenado y, dado que se permite el inicio de sesión anónimo, procederemos a conectarnos para descargar este archivo y acceder a su contenido.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FqpHBsFekvj5tO6MGELes%2Fimage.png?alt=media&amp;token=79583c1e-fb0b-4925-821a-0ff9092ee1c6" alt=""><figcaption></figcaption></figure>

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FARAuOZEHg1QPfSju7KYS%2Fimage.png?alt=media&amp;token=3a0ca1b1-1a8a-424a-a303-fff110e4959f" alt=""><figcaption></figcaption></figure>

### 🚀 **EXPLOTACIÓN**

El archivo está cifrado y necesitamos una clave para descifrarlo. Utilizamos la herramienta `zip2john` de Kali Linux para obtener el hash del archivo. Posteriormente, desciframos este hash con `John the Ripper`.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2Fy6MGfk5Sfz5oFirFoTFV%2Fimage.png?alt=media&amp;token=024e4243-2a3b-4386-a52f-d61a444f258d" alt=""><figcaption></figcaption></figure>

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2Ffw7ls7PZVWAFVasT8gXK%2Fimage.png?alt=media&amp;token=0a640c1a-f08d-4435-90ac-56222ef2f342" alt=""><figcaption></figcaption></figure>

Hemos conseguido la contraseña necesaria para extraer el contenido del archivo ZIP, la cual es `"password1"`. Ahora, al ejecutar el comando `unzip` en la CLI.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FjHuxTepYhRcroNle0Bqe%2Fimage.png?alt=media&amp;token=65046322-6483-47a6-b3dd-7d5099316b00" alt=""><figcaption></figcaption></figure>

Parece que tenemos las credenciales del usuario **mario** en la máquina vulnerable. Las utilizaremos para establecer una conexión **SSH** con ella.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FkkWuKJCQxF7xfdrDewe1%2Fimage.png?alt=media&amp;token=8cb32e63-9457-42e3-878f-990473fbe44b" 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%2FSPJ7Al4J6SzozlEGesdk%2Fimage.png?alt=media&amp;token=2efbe127-fc01-4ee2-b7ac-712deb0ade0c" alt=""><figcaption></figcaption></figure>

Para verificar los archivos binarios que el usuario `mario` puede ejecutar, observamos que tiene permisos para ejecutar el binario `/usr/bin/node` y un script **JavaScript** ubicado en la ruta `/home/mario/script.js` con privilegios elevados. Esto podría permitirnos realizar una escalada de privilegios y obtener acceso como usuario **root**.

El archivo se encuentra vacío por lo que añadimos la siguiente línea de código.

```javascript
require('child_process').spawn('/bin/sh', { stdio: [0, 1, 2] });
```

Ejecutamos el siguiente comando en la terminal para llevar a cabo la escalada de privilegios.

```bash
sudo /usr/bin/node /home/mario/script.js
```

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FJxWa5GYIFFx8i8L5LVfj%2Fimage.png?alt=media&amp;token=f42f823e-d60b-479f-aa5b-3238e2fec503" alt=""><figcaption></figcaption></figure>

Hemos conseguido acceso como **root**, lo que nos otorga todos los permisos en el sistema.
