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.18
.
Realizamos un ping a la dirección IP y podemos validar que tenemos alcance.
Empezamos con un escaneo de puertos y podemos ver que solo tenemos el puerto 80.
Al realizar un escaneo más profundo del puerto vemos que nos muestra el nombre de un directorio.
Nos dirigimos al navegador e ingresamos la dirección IP con el directorio se puede observar que tenemos un botón de login.
Al realizar clic en el botón tenemos el formulario, probamos algunas credenciales, pero no logramos entrar.
Antes de continuar realizamos un escaneo de directorios y podemos observar que tenemos varios interesantes.
Entre los que nos llamaron la atención tenemos el upload.html
, al dirigirnos a ese directorio observamos una página muy sencilla para subir archivos.
Probamos subiendo un archivo.
Luego de enviarlo, tenemos una respuesta positiva.
Tratamos de dirigirnos a ese directorio, pero no es posible ver el archivo.
Realizamos el mismo procedimiento con un archivo PHP, pero esta vez, no podemos verlo.
Cambiamos a otra extensión y esta vez si nos identifica el archivo, pero lo descarga.
Con esta confirmación, lo que realizaremos es interceptar el envío con Burpsuite, pero no observamos nada diferente.
Probamos agregando el magic number
correspondiente a otro archivo y eliminando la ruta del directorio, pero manteniendo el renglón donde estaba, porque si no mantenemos el espacio y eliminamos la ruta del directorio este no sube.
Nos dirigimos a la ruta y podemos observar que tenemos acceso al archivo.
Con esto confirmado, lo que realizaremos es intentar subir una revshell.
Antes iniciaremos nuestro listener.
Capturamos el envío y modificamos los datos.
Sin olvidarnos de eliminar el nombre del directorio
Luego de ingresar la dirección en el navegador este se quedara cargando y al dirigirnos a nuestro listener podemos observar que ya tenemos 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 los directorios podemos ver que tenemos acceso como el usuario, pero no podemos ver el contenido del archivo.
Realizamos un sudo -l
en el cual podemos observar que tenemos permisos para ejecutar el binario cp
como melisa.
Para saber como emplearlo, podemos realizar la búsqueda en GTFOBins y ver como ejecutar este binario.
Revisando que podemos hacer vemos que en la carpeta de melisa
teníamos una carpeta .ssh
lo cual nos indica que probablemente tenga el id_rsa
por ello creamos un archivo llave
luego copiaremos este archivo en una carpeta temporal.
Al abrir el archivo podemos observar la llave id_rsa
.
Le damos permisos de ejecución, probamos conectarnos, pero el puerto nos rechaza.
Revisando los puertos internos, podemos ver que tenemos el puerto 4444
habilitados.
Probamos conectándonos y podemos observar que también el puerto corresponde al servicio, pero la llave no se valida porque parece que no tenemos acceso a /var/www/.ssh
.
Probamos empleando rutas temporales, pero no es posible.
ssh -i id_rsa -p 4444 melisa@localhost -o UserKnownHostsFile=/tmp/known_hosts
ssh -i id_rsa -p 4444 melisa@localhost -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
Leemos el contenido de las claves públicas del usuario y podemos observar que solo contiene un LOL
.
Viendo nuestras opciones optamos por probar creando un clave pública y luego insertarla en el directorio de melisa
.
En el directorio tmp
creamos una carpeta llamada llaves y dentro de esta generamos las claves.
Una vez generado, reemplazaremos la clave pública de melisa que solo contenía un lol
por la que generamos.
Intentamos conectarnos como melisa
y tenemos éxito. Ya somos el usuario melisa.
Realizamos un sudo -l
y podemos observar que tenemos varios binarios con todos los permisos.
Viendo cuál de todos nos puede ser útil, tenemos a man
el cual si revisamos en la página de GTFOBins podemos observar como escalar a root
.
Ingresamos el comando.
Luego de ingresar el comando nos mostrara el manual de man
y presionamos esc
o !
para poder ingresar el siguiente comando, pero no nos permite.
Probamos agregando la función less
. Pero si bien podemos ingresar los comando al generar la shell solo nos genera una shell como melisa
.
Ya que con less
obtuvimos un avance, revisando el manual vemos que podemos emplear MANPAGER
para hacer referencia a este.
Por ello primero creamos un archivo. En este caso base.txt
y ejecutamos el comando agregando el nuevo parámetro.
Ahora sí podemos ingresar !
y luego de ello ejecutar el siguiente comando.
Luego de enviar el comando podemos observar que ya somos root. De esta manera culminando esta máquina.