HackMyVM - T800
15 septiembre 2021
Esta máquina se encuentra en la plataforma HackMyVM y ha sido creada por el usuario sml.
Una máquina más compleja de lo habitual con una enumeración basada en metadatos y una escalada de privilegios a partir de una mala configuración de binarios.
# | Dificultad |
---|---|
Acceso | Fácil |
Escalada de privilegios | Media |
Enumeración
La enumeración comienza descubriendo la dirección IP de la máquina objetivo esto se hacer mediante la herramienta ping-sweep. La realización de un barrido ping y no un barrido ARP es debido a que la máquina objetivo está en una red distinta a la máquina objetivo, ARP es un protocolo de nivel 2 (enlace) y sus paquetes no son capaces de atravesar redes (nivel 3).
La herramienta ha detectado 4 IP:
- 10.10.10.1 - linux → Gateway
- 10.10.10.100 - linux → Candidato a objetivo
- 10.10.10.101 - windows → Sistema anfitrión
- 10.10.10.102 - linux → Candidato a objetivo
Se obtienen dos posibles candidatos, en mi laboratorio tengo una Raspberry Pi como NAS y un servicio samba. Por lo que para identificar cual es cual se realiza un par de escaneos ARP rápidos. Así se identifica como la máquina objetivo la que tiene dirección 10.10.10.100
Una vez identificada la máquina objetivo 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.
Se detectan los puertos 80 y 800 abiertos con los servicios HTTP y SSH respectivamente. Es de extrañar que el servicio SSH se encuentre en el puerto 800.
Se utiliza whatweb para enumerar rápidamente la web y curl para detectar si existe un fichero robots.txt.
En el fichero robots.txt se encuentra la ruta /sexy/*.jpg, por lo que será necesario un posterior fuzzing para encontrar imágenes ocultas.
A continuación se vuelve a utilizar curl para obtener el código html de la página principal encontrando al final del contenido un comentario con un potencial usuario.
Consultando la web con el navegador se encuentra una imagen de nuestro todo poderoso y salvador Richard Stallman.
A continuación, se realiza el fuzzing sobre la ruta encontrada en el fichero robots.txt.
Se encuentra la imagen nudeslut.jpg.
La imagen se descarga para consultar sus metadatos y comprobar si tiene algo de estego.
En los metadatos se encuentra la contraseña de acceso: chmodxheart.
Ganar acceso
Una vez con las credenciales ruut:chomodxheart puede contectarse a la máquina a través del servicio SSH.
Se consultna los usuarios del sistema y se encuentran 3 usuarios: root, ruut y superruut. Lo más seguro es que sea necesario escalar a superruut y de superruut a root.
Ahora se consultan los permisos de ruut y se encuentran permisos suid para dos binarios extraños: conky y calife.
Consultando el manual de los binarios para determinar en qué consisten y qué realizan.
Escalada de privilegios - Primera fase
Como el manual indica, el binario calife puede utilizarse para convertirse en root o en otro usuario. El vector para la escalada a superruut será este binario, para ello se ejecuta el binario y se indica el usuario al que se quiere escalar.
En VIM se ejecuta una /bin/bash para conseguir una shell interactiva.
Ya puede consultarse la flag de user.
Ahora será necesario la escalada a root. Se vuelven a consultar los permisos
Escalada de privilegios - Segunda fase
La escalada mediante el binario conky es la más compleja realizada hasta la fecha. Conky, como indicaba el manual, es un monitor del sistema por lo que la escalda deberá estar realionada con la exfiltración de algún archivo privilegiado como shadow o la clave privada de root.
Sin embargo, antes de iniciar con la escalada se generan un par de claves para conectarse como superruut mediante SSH sin proporcionar contraseña. Esto facilitará conectar como superruut sin tener que realizar todo el proceso de calife.
Se incluye la clave pública generada en el arhcivo authorized_keys de superruut.
Ya se puede conectar como superruut sin proporcionar contraseña.
Ahora sí, se copia el archivo de configuración de conky en el la carpeta de superuut y se edita para mostrar información a través de la terminal.
También será necesario modificar los archivos de conky para que muestren la información deseada por la consola, en este caso se desea exfiltrar la clave privada de root (si existe).
Se ejecuta conky y se realiza una nueva conexión mediante SSH para que se muestren los datos monitorizados por conky así como la clave privada de root en la terminal debería mostrarse la clave privada de root.
Se copia la clave privada y se realiza una conexión SSH como root y proporcionando la clave privada. No olvidar que es necesario asignar los permisos correctos a la clave privada antes de utilizarla.
Por último se consulta la flag de root y se sube a la web de hack-my-vm.