Cyber ​​Apocalypse 2025 Escritura - Prueba por fuego

· 2min · Juicecat
Table of Contents

juicio por fuego

Para este ejercicio, nos dieron una URL con una aplicación web y un archivo zip que contiene el código fuente.

Mirando el código fuente, vemos que es una aplicación web de frascos dentro de una imagen de Docker administrada por UWSGI y Supervisord index.md-2.png Cuando visitamos el sitio, nos recibe esta pantalla: index.md-3.png

La última línea se destacó para mí.Verificar la plantilla Jinja para esta página en el código fuente nos muestra la solución obvia aquí: inyección de plantilla: index.md-4.png

Entonces, ahora sé que la inyección de plantilla es probablemente el camino a la victoria.Lo que necesito ahora es un campo en el que puedo inyectar una carga útil que no se escape.Afortunadamente, solo hay un campo real en el que realmente ingresamos en la aplicación: el nombre de usuario del guerrero al principio.Buscando las plantillas de la fuente, vemos otra instancia: index.md-5.png Entonces, esta parece una dirección obvia para entrar. Establezcamos nuestro nombre de usuario en _BRACE0_

Después de jugar el juego, somos recibidos con esta pantalla. index.md-6.png

Mirando los datos, hay varias piezas interesantes de información:

  1. La ruta de la aplicación: /app/venv/lib/python3.12/site-packages/flask/app.py
  2. Acceso a funciones peligrosas como eval y exec en el diccionario __builtins__
  3. Datos de sesión que muestran que la inyección funciona: 'warrior_name': '_BRACE0_'
  4. Acceso al contexto de la aplicación actual: current_app': <HTB 'application.app'>

Entonces, para encontrar la bandera podemos:

  • Función open a través de __builtins__
  • módulo os
  • Varias funciones de ejecución de Python

Terminé con la carga útil SSTI {{ url_for.__globals__.__builtins__.open('/app/flag.txt').read() }}, que simplemente solo lee el indicador.Desafortunadamente, el formulario web limita la longitud del nombre del personaje, por lo que debemos usar BurPsuite para interceptar la solicitud y reemplazar nuestro nombre con la carga útil: index.md-7.png

Luego, después de jugar la secuencia, somos recibidos con la bandera :) index.md-1.png