Status DockerLabs (Intermediate)
Instalación
Cuando obtenemos el .zip nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.
unzip status.zipNos lo descomprimira y despues montamos la maquina de la siguiente forma.
bash auto_deploy.sh status.tarInfo:
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
___ ____ ____ _ _ ____ ____ _ ____ ___ ____
| \ | | | |_/ |___ |__/ | |__| |__] [__
|__/ |__| |___ | \_ |___ | \ |___ | | |__] ___]
Estamos desplegando la máquina vulnerable, espere un momento.
Máquina desplegada, su dirección IP es --> 172.17.0.2
Presiona Ctrl+C cuando termines con la máquina para eliminarlaPor lo que cuando terminemos de hackearla, le damos a Ctrl+C y nos eliminara la maquina para que no se queden archivos basura.
Escaneo de puertos
Info:
Veremos unicamente el puerto 80 en el que aloja una pagina web, si entramos dentro de la misma veremos una pagina normal sin nada interesante, por lo que vamos a realizar un poco de fuzzing a ver que encontramos.
Gobuster
Info:
Veremos que nos ha encontrado varias cosas interesantes, entre ellas el archivo llamado /status.php pero vemos que nos reporta un 403, por lo que no podremos acceder directamente a el, ya que tendremos el acceso restringido.
Pero igualmente si intentamos acceder a dicho archivo, veremos lo siguiente:

Vemos que es un falso positivo lo que nos dio Gobuster si podremos entrar, pero en la propia pagina no nos pone nada interesante, por lo que vamos a realizar un poco de fuzzing a ver que vemos.
Vamos a probar a utilizar nikto a ver que nos encuentra.
Nikto
Info:
Vemos algo bastante interesante aqui, el siguiente parametro de la respuesta del servidor en la cabecera de la pagina.
Vamos a comprobar eso que nos reporto nikto utilizando BurpSuite, vamos abrirlo, lo configuramos para que este en mitad de la comunicacion cliente-Servidor, una vez echo eso capturamos la peticion con BurpSuite y veremos lo siguiente:
Peticion Cliente
Respuesta Servidor
Vemos que efectivamente contiene en la respuesta el Statusid que nos estaba reportando Nikto, si probamos a ponerlo en 1 y enviamos la respuesta no va a funcionar directamente ahi, por lo que vamos a probar a modificar la peticion del cliente para añadir directamente el Statusid con el valor 1 a ver que pasa, quedando algo asi:
Peticion Cliente Modificada
Si lo enviamos nos contestara esto el servidor:
Respuesta Servidor
Vemos que el valor se modifico de forma correcta y que el contenido de la web es otra cosa, ha cambiado veremos esto:

Vamos a probar a realizar algun SSRF por ejemplo, vamos a poner nuestra IP junto con un archivo que crearemos, para ver si nos coge desde nuestro servidor de python3 dicho archivo o hace el intento.
test.txt
Abriremos dicho servidor de python3.
Ahora en el campo de la URL vamos a poner lo siguiente:
Si le damos a enviar teniendo el BurpSuite a la escucha para capturar la peticion, veremos lo siguiente:
En esta parte tendremos que volver añadirle el Statusid: 1 para que funcione y nos vuleva a redirigir a la pagina en la que estamos quedando asi:
Ahora si lo enviamos, veremos lo siguiente:

Vemos que ha funcionado y que obtiene el archivo, a parte de que plasma el contenido en la pagina, si intentamos una shell con PHP o intentar buscar el archivo si se ha subido al servidor no funcionara nada, pero lo que si funciona es una peticion de archivo de forma interna respecto al servidor, haciendo algo asi.
Si ponemos eso y lo enviamos, siguiente todo lo anterior veremos lo siguiente:

Vemos que efectivamente esta leyendo dicho archivo que esta en dicho puerto, pero si intentamos algo como file:// no va a funcionar, por lo que hay que seguir investigando el vector de entrada.
Vamos a realizar un escaneo de puerto a nivel interno del servidor, a ver si estuviera alguno de forma interna, por lo que vamos a montarnos un script para ello.
ssrf_port.py
Ahora lo ejecutaremos de la siguiente forma:
Info:
Vemos que hay un puerto a parte del 80 en el que al parecer puede estar abierto de forma interna, vamos a comprobarlo el output desde la web.
Si lo enviamos y hacemos todo lo anterior de la cabecera con BurpSuite, etc.... Veremos lo siguiente en la pagina:

Vemos que si funciona y estamos viendo algo bastante interesante, por lo que vamos a investigar ese endpoint que estamos viendo.
Vamos a probar a enviar el endpoint de forma local de esta forma:
Ahora si lo enviamos, haciendo todo lo anterior veremos lo siguiente en la pagina:

Vemos que ha funcionado y nos esta mostrando una URL interna a la que vamos acceder poniendolo directamente en el campo de Check Status.
Pero veremos que el ZIP nos lo muestra literalmente, por lo que vamos a descargarnoslo de forma directa mediante un script de python3.
ssrf_saved_zip.py
Ahora lo ejecutaremos de esta forma:
Info:
Veremos que ha funcionado, por lo que vamos a extraer dicho archivo de esta forma:
Info:
Ahora vamos a investigar la estructura de carpetas que se nos ha descomprimido, para ver si vemos algo interesante.
Si entramos dentro de dicha carpeta descomprimida, veremos esto:
Esto nos da una pista de que a nivel de web puede ser que exista esta ruta de carpetas empezando por 061400ca5d384de48f37a71ec23cc518 y lo que continua hasta llegar a esto:
Info:
Vamos a probar a meternos en el archivo status.php desde esa ruta de carpetas, pero antes vamos a leer que contiene los 2 archivos:
file.php
status.php
Vemos que en el file.php con dicho parametro podremos leer archivo o eso parece, y en el status.php es la v1 osea una version mas antigua del primer archivo status.php al que entramos, vamos a comprobar si entramos en el status.php de v1.
Una vez que entremos con BurpSuite añadiremos el Statusid: 1 para que funcione como lo haciamos antes y veremos lo siguiente:

Vemos que efectivamente cambian cosas y que es la v1 por lo que estamos accediendo de forma correcta a los archivos, ahora vamos a probar con el file.php de esta forma:
Info:
Vemos que esta funcionando, por lo que vamos a probar a utilizar wrappers en PHP para ejecutar comandos de forma remota (RCE).
Escalate user www-data
LFI / RFI usando wrappers
Vamos a utilizar una herramienta de GitHub que nos automatiza el proceso de codificar el payload que vamos a injectar en la URL.
URL = https://github.com/synacktiv/php_filter_chains_oracle_exploit/blob/main/filters_chain_oracle_exploit.py
Vamos a crear un parametro llamado cmd que ejecute cualquier comando que le pongamos, tendremos que ejecutarlo de esta forma:
Info:
Copiaremos todo a partir de php://... y la URL nos quedara algo como:
Info:
Vemos que esta funcionando, por lo que vamos a generarnos una reverse shell de esta forma.
Antes de enviarlo nos pondremos a la escucha de esta forma:
Ahora si lo enviamos con BurpSuite poniendole en la cabecera el Statusid: 1 y volvemos a donde tenemos la escucha veremos lo siguiente:
Vemos que ha funcionado, por lo que sanitizaremos la shell.
Sanitización de shell (TTY)
Escalate user baluton
Si buscamos en todo el sistema no veremos nada interesante, por lo que como ultimo recurso vamos a probar a realizar fuerza bruta con el usuario balutin utilizando un script y pasarnos el diccionario rockyou.txt.
URL = Download GitHub suBruteforce.sh
Vamos a pasarnos dicho archivo a la carpeta /tmp, una vez que lo hayamos echo le daremos permisos de ejecuccion de esta forma:
Y vamos a pasarnos el diccionario desde el host.
Ahora desde la maquina victima haremos lo siguiente:
Una vez que nos hayamos pasado todo, lo ejecutaremos de esta forma:
Info:
Vemos que ha funcionado, por lo que nos cambiaremos a dicho usuario.
Metemos como contraseña 123123 y veremos que seremos dicho usuario.
Escalate Privileges
Si hacemos sudo -l veremos lo siguiente:
Vemos que podemos ejecutar el binario unzip como el usuario root.
Pero si probamos a descubrir la contraseña del otro usuario llamado redghost tambien la encontraremos:
Info:
Si cambiamos a dicho usuario, tambien nos funcionara, pero no veremos nada interesante, por lo que vamos a realizar un fuzzing con los 2 usuario a ver que encontramos.
Pero si listamos la raiz (/) veremos el siguiente archivo.
Vamos a descomprimirlo con el sudo que tenemos de unzip de esta forma:
Info:
Veremos que nos dejo un archivo llamado regalitoregalazoregalin.txt si lo leemos veremos lo siguiente:
Por lo que vamos a probar si fueran las credenciales de root.
Metemos como contraseña balulonbalulinbalutonjeje...
Info:
Veremos que ha funcionado, por lo que ya seremos el usuario root y habremos terminado la maquina.
Last updated