HackMyVM - Hommie
14 septiembre 2021
Esta máquina se encuentra en la plataforma HackMyVM y ha sido creada por el usuario sml.
Una máquina sencilla sin técnicas complejas de explotación pero que requiere de una buena enumeración. Esto hace que sea una máquina muy entretenida de resolver.
# | Dificultad |
---|---|
Acceso | Fácil |
Escalada de privilegios | Fácil |
Enumeración
Como todas las máquinas de esta plataforma es necesario conocer la dirección IP de la máquina. Para ello utilizaré la herramienta ping-sweep con el modo de descubrimiento de sistema operativo para poder avanzar más rápido en la enumearción. El motivo de utilizar esta herramienta y no otra basada en el protocoo ARP se debe a que despliego las máquinas en una red privada que utilizo como laboratorio y distinta a la red local, por lo que un descubrimiento mediante ARP no detectará las máquinas.
La herramienta ha detectado 5 IP:
- 10.10.10.1 - linux → Gateway
- 10.10.10.100 - linux → Raspberry Pi de mi laboratorio
- 10.10.10.101 - windows → Sistema anfitrión
- 10.10.10.102 - linux → No identificada
- 10.10.10.103 - linux → No identificada
Se encuentran dos posibles máquinas que pueden ser la máquina objetivo, para identificarla se realizará un escaneo de puerto rápido para determinar cual es la máquina objetivo.
Estos escaneos identifican que la máquina objetivo es la de la dirección IP: 10.10.10.103.
A continuación, se comienza con el escaneo de puertos. Como es habitual para el escaneo se utiliza nmap y se divide en dos fases: la primera de un escaneo rápido de los 65535 puertos para detectar aquellos abiertos y la segunda para realizar una enumeración más exahustiva usando scripts básicos de los puertos abiertos.
Una vez obtenidos los puertos abiertos se realiza el segundo escaneo más específico. Para obtener los puertos de forma rápida se utiliza la herramienta get-ports. Esta herramienta obtiene los puertos de un archivo nmap y los copia en la clipboard, está basada en la herramienta extractPorts del usuario S4vitar.
El escaneo durará 5 minutos, tiempo suficiente para hacerse un café.
Con el café en mano se consultan los resultados del escaneo, el cual ha desvelado 3 puertos abiertos: HTTP, FTP y SSH. Además, el escaneo desvela que el servicio FTP permite la conexión anónima.
Primero se realiza una enumeración del servicio HTTP mediante la herramienta whatweb y obteniendo la página principal con curl.
En la página principal del servicio HTTP se dan dos pistas. La primera la existencia de un usuario alexia, la segunda que su clave privada está expuesta. Será necesario encontrar la clave privada.
Ya que el servicio FTP permite la conexión FTP, se inicia la búsqueda en ese servicio.
Se descubre la carpeta oculta ".web" pero sin ningún contenido interesante. La clave privada se encontrará en otro lado.
Ganar acceso
La carpeta oculta da a pensar que puede haber algún servicio oculto, por lo que se realiza un escaneo de los primeros 100 puertos UDP.
Se descubren dos servicios UDP, el servicio DHCP y un servicio TFTP (Trivial File Transfer Protocol). Se realiza la conexión al servicio TFTP y se solicita la clave privada.
¡Éxito! La clave privada está expuesta en este servicio. Se inicia una conexión SSH como usuario alexia y usando la clave privada.
Escalada de privilegios
Se consultan los privilegios del usuario alexia y se descubre permiso SUID para ejecutar un binario showMeTheKey.
El nombre del archivo no deja mucho lugar a la imaginación, aún así se ejecuta para saber qué realiza.
El binario muestra la clave privada del usuario alexia. Se realiza un análisis estático básico del binario, consultando las cadenas de caracteres mediante la herramienta strings.
Entre las cadenas se encuentra un posible vector de ataque, el binario muestra la clave privada basándose en la variable de entorno $HOME.
Se modifica la variable de entorno para contener /root en lugar de /home/alexia.
Se ejecuta el binario y ahora se muestra la clave privada de root, esta clave se copia y se pega en otro archivo para realizar la posterior conexión como root.
El usuario root se obtiene realizando una nueva conexión SSH utilizando la clave privada recién adquirida.
En el directorio base del usuario root existe un archivo de texto que indica que no se sabe dónde se encuentra la flag. Pero una simple búsqueda encuentra la flag.
Finalmente, se obtienen las dos flags y se concluye la resolución de la máquina.