En este writeup vamos a resolver la máquina Fuser dificultad low de VulNyx.
Resumen de conceptos trabajados:
Escaneo de Puertos CUPS (CVE-2024-47176) Escalada de Privilegios Dash (SUID) |
Si es tu primera máquina de VulNyx y no sabes cómo conectarte a la máquina del laboratorio, te recomiendo que visites este post donde te cuento paso a paso cómo empezar en esta plataforma.
Estructura del contenido
Conexión Previa
Cómo Verificar que estamos conectados a la máquina víctima
Lo primero que tendrás que hacer cuando vayas a trabajar sobre alguna de las máquinas de VulNyx, es descargarla en tu equipo. Una vez descargada y descomprimida, irás a tu VMWare o VirtualBox y la importarás para virtualizarla.
Después de importarla, configura la conexión de red a Red NAT, para que tanto máquina atacante como máquina víctima se encuentren.
Después, abro la máquina de VulNyx y la dejo abierto para que esté activa.
Comenzando con el reconocimiento de la máquina víctima
Inicio mi sesión siendo usuario root de mi máquina atacante con el comando “sudo su” y creamos previamente una nueva carpeta dentro de nuestro Kali para esta máquina y poder crear allí todo lo que analicemos.
Para asegurarnos de que la máquina víctima está conectada en la red:
sudo arp-scan -I eth0 --localnet
y de esta forma vemos todas las IPs conectadas para empezar a analizarla (podemos comprobar que se encuentra la IP de la máquina VulNyx cuando la ejecutamos anteriormente).
Para asegurarte de que la máquina está activa, enviamos un ping:
ping -c 1 10.0.2.5 -R
*comando -R para hacer un trace root y ver el ttl de la máquina y ver qué SO corre (Linux).
también puedes hacer un escaneo nmap:
nmap -sn 10.0.2.5
Fase de Enumeración / Escaneo de Puertos
Comenzamos el análisis con la fase de enumeración y escaneo de puertos mediante el comando:
sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.0.2.5 -oG Escaneo
La explicación de cada comando sería:
La idea de este escaneo es detectar puertos abiertos en la dirección IP especificada.
sudo
: comando en Linux con privilegios de administrador.
nmap
: nmap herramienta para escanear redes. Principalmente para descubrir hosts activos.
-p-
: esta opción le indica a nmap que escanee todos los puertos del 1 al 65535.
--open
: nmap solo mostrará los puertos que están abiertos.
-sS
: especifica el tipo de escaneo que se va a realizar. En este caso, es un escaneo SYN, también conocido como «escaneo sigiloso» o TCP SYN scan. Este tipo de escaneo no establece una conexión completa con el puerto, solo envía un paquete SYN y espera una respuesta. Si el puerto está abierto, responde con un SYN-ACK; si está cerrado, responde con un RST.
--min-rate 5000
: establece la velocidad mínima del escaneo en 5000 paquetes por segundo, lo que significa que nmap intentará enviar al menos 5000 solicitudes cada segundo. Esto puede hacer que el escaneo sea más rápido, pero también puede aumentar las posibilidades de que sea detectado por sistemas de seguridad.
-vvv
: Es el nivel de información que muestra nmap mientras escanea.
-n
: esta opción le indica a nmap que no resuelva nombres de dominio (DNS). Es decir, solo utilizará direcciones IP sin intentar convertirlas en nombres de host.
-Pn
: le dice a nmap que no haga un «ping» a la dirección IP antes de escanearla. Con -Pn
, nmap asumirá que el host está activo y procederá directamente al escaneo de puertos, útil si el host bloquea pings.
10.0.2.5 : es la IP de la máquina víctima.
-oG Escaneo
: especifica el formato de salida y el nombre del archivo donde se guardarán los resultados del escaneo. Escaneo
es el nombre del archivo de salida donde se guardarán los resultados.
Después el escaneo me devuelve que los puertos 22 ssh, 80 http y 631 ipp están abiertos.
*El puerto 631 ipp (Internet Printing Protocol) o protocolo de impresión CUPS (Common UNIX Printing System). Este protocolo permite la administración y conexión a impresoras en red en sistemas basados en UNIX y Linux, pero también es común en otros sistemas operativos. CUPS se encarga de manejar trabajos de impresión, gestionando la cola y facilitando la comunicación entre las computadoras y las impresoras.
Sabiendo que estos puertos están abiertos, lo que hacemos a continuación es lanzar una serie de scripts básicos de reconocimiento de nmap para ver qué servicios y versiones corren por esos puertos:
nmap -sCV -p22,80,631 10.0.2.5
Sabiendo que el puerto 80 web está abierto, a mí me gusta empezar la investigación por aquí, y le lanzo un whatweb para ver qué me devuelve. En este caso no hay nada más relevante que la versión del servidor Apache 2.4.56.
Analizando con searchsploit la versión de Apache, vemos que podría ser un vector de entrada a un RCE por ejemplo…
Viendo que la web solo muestra este código 200 y después de analizar el robots.txt, código fuente, etc. vamos a analizar qué directorios o subdominios podemos encontrar que estén disponibles.
Primero analizamos directorios con por ejemplo la herramienta gobuster pero también hay otras como wfuzz, etc.
gobuster dir -u http://10.0.2.5/ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -x php,pdf,html
Nos devuelve como directorio abierto el index.html que en realidad es la propia web.
Por tanto por aquí no parece estar la entrada.
CUPS 2.3.3
Vamos con el puerto «raro» 631 IPP de gestión de impresoras, por lo que accedemos desde el navegador. Y efectivamente nos devuelve lo que parece un panel de impresoras para la versión CUPS 2.3.3op2.
Buscamos esa versión de CUPS 2.3.3 en searchsploit y vemos que no hay exploits:
Por lo que vamos a investigar la página un poco más…
Y vemos una sección llamada /printers , que parece contener un nombre de usuario (Konika Minolta) y una lista de posibles acciones de impresión en cola.
Con este usuario podríamos probar fuerza bruta con Hydra y aplicar fuerza bruta en la autenticación por el puerto 20 ssh.
El usuario d4t4s3c en su writeup menciona que se han descubierto 4 CVEs para CUPS y que 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 será interpretado en el momento de hacer click en “Imprimir página de prueba”
Utilizamos el exploit de ippsec que te automatiza todo el proceso, por lo que clonamos el repo de github:
Vamos a las impresoras y vemos la nueva impresora HACKED_10_0_2_4
abrimos la impresora y le damos a imprimir de prueba, y en nuestra máquina de escucha se abre el panel:
ESCALADA DE PRIVILEGIOS
Ahora que recibimos una shell, hacemos tratamiento de la tty. ¿Como Hacerlo?
Continuamos buscando binarios con el bit SUID de la siguiente manera:
find / -perm -4000 2>/dev/null
si nos fijamos, el binario «dash» tiene activado el bit SUID, por lo que luego de buscar veo que se puede escalar ejecutando lo siguiente:
/usr/bin/dash -p
Una vez escalemos ya podremos ver la flag.