Para poder hacer uso de esta máquina primero debemos descargar los archivos y así desplegarlo con Docker.
Descargamos el archivo de la página dockerlabs.es/#
Al momento de descargar esta máquina y descomprimir el archivo, en este caso observamos 2 archivos.
Para desplegar el laboratorio ejecutamos de la siguiente manera, así también podemos ver que nos indica la dirección que tendremos, así también el que hacer cuando terminemos este.
Realizamos un escaneo de la dirección IP y podemos observar que tenemos 2 puertos identificados.
Al dirigirnos a la dirección IP por medio del navegador podemos observar que la página es muy sencilla y los botones que identificamos no son funcionales, el nombre del autor TLuisillo_o
y también podemos observar al final que hay un mensaje de error.
Revisando el archivo podemos observar que no hay algo extra que indique algo más.
Realizamos un escaneo de directorios y podemos observar que tenemos un directorio llamado assets
y que el index.php
que es la página principal.
Nos dirigimos al directorio y solo observamos una imagen, revisamos si tiene algo interesante, pero no contiene nada llamativo.
Debemos regresar al comienzo y recordemos que nos imprimía un error, también durante el escaneo observamos que él el index es un archivo .PHP así que podemos suponer que está llamando algo de manera incorrecta.
Por ello realizaremos fuzzing para observar si identificamos un parámetro. Usamos wfuzz y podemos observar que el parámetro era secret
.
Al dirigirnos a la página web podemos observar que agregando el parámetro y la consulta observamos el resultado del LFI.
Viendo en más detalle observamos que hay 2 usuarios aparte de root.
Ya que o tenemos nombres de usuarios probaremos con fuerza bruta al puerto SSH con uno de estos usuarios, pero no obtenemos algún resultado favorable. Probamos revisando algunos archivos .log
, no obtenemos ningún resultado. Buscamos archivos comunes de los usuarios y para el usuario vaxei
podemos obtener su archivo id_rsa
.
Creamos el archivo id_rsa
, copiamos el contenido que pudimos leer.
Para poder hacer uso le damos permisos y ejecutamos, así observamos que ya tenemos acceso como vaxei
.
Realizamos un ls
y observamos un archivo abrimos y observamos 3 palabras que no tienen sentido.
Al realizar un sudo -l
observamos que podemos escalar como Luisillo usando el binario de Perl.
Si nos dirigimos a la página de GFTOBins podemos observar como realizarlo, solo debemos agregar el nombre del usuario, porque es para quien tememos permisos.
Ingresamos los comando y podemos observar que ya tenemos accesos como luisillo
.
Para mejorar nuestra shell volvemos a iniciarla para ello insertamos el siguiente comando para generar una nueva shell y los comandos no se registren.
script /dev/null -c bash
Volvemos a realizar un sudo -l
y observamos que podemos ejecutar comandos con todos los permisos, pero esto solo se puede ejecutando un archivo específico.
Nos dirigimos a ese directorio y podemos observar que solo está ese archivo.
Al realizar un listado de archivos a primera vista podemos que no tenemos permisos. Pero si revisamos a la izquierda los permisos que tenemos observamos que Los miembros del grupo "root" solo pueden modificar el archivo, y todos los demás solo pueden leer el contenido del archivo.
Abrimos el archivo y podemos entender que el script realiza varias tareas triviales y luego ejecuta un par de comandos del sistema que simplemente imprimen texto en la terminal. Aunque contiene funciones que procesan datos y realizan cálculos, estas no tienen un impacto significativo en el resultado final.
Intentamos ejecutar el archivo y observamos que nos da un error, porque subprocess.run
espera que el primer argumento sea un comando ejecutable, y luego un argumento, pero está pasando el comando como un solo argumento ['echo Hello!']
. Y esto hace que Python busque un ejecutable llamado echo Hello!
. También podemos observar un error en el archivo subprocess.py
Ya que el archivo parece tener un error podemos aprovecharnos de este y crear uno con el nombre que está buscando y explotarlo por ahí. Para ello crearemos un archivo llamado 'echo Hello!'
, pero al tener comillas genera errores y sigue saliendo el problema.
No nos enfocaremos en el archivo que emplea el proceso sino en el archivo subprocess.py
.
Primero aunque no es necesario agregaremos nuestro directorio actual al path, esto lo hacemos usando.
Luego de ello, creamos el archivo llamado subprocess.py
y su contenido será un script que de permisos a cualquier usuario y este pueda ejecutar la bash como root.
Una vez hecho ello ejecutamos el archivo paw.py
como root y podemos observar que tenemos un error, pero no nos indica el error del archivo subprocess.py
, ya que tomo nuestro archivo como el módulo que necesitaba y lo ejecuto por eso no observamos que nos muestre los errores de parámetros que encontraba en ese archivo al comienzo.
Ahora si hacemos un bash -p
podemos observar que obtuvimos el root y de esta manera culminamos la máquina.