Almost SSTI
1 minuto de lectura
Se nos proporciona una página web para analizar. La página principal muestra el código fuente del servidor:
#!/usr/bin/env python3
from flask import Flask, render_template_string, request, Response
app = Flask(__name__)
@app.route('/')
def index():
return Response(open(__file__).read(), mimetype='text/plain')
@app.route('/ssti')
def ssti():
query = request.args['query']
if len(query) > 2:
return "Too long!"
return render_template_string(query)
app.run('0.0.0.0', 3002, debug=True)
Se trata de una página web hecha en Flask (Python). Algo interesante es que el modo debug
está activado.
El reto habla de SSTI (Server-Side Template Injection), pero solamente podemos introducir 2 bytes. Esta longitud hace imposible explotar un SSTI. Lo único que podemos hacer es causar un error con {{
:
Como el modo debug
está habilitado, podemos abrir una consola interactiva de Python en esta página, (pinchando en el icono de la consola). Y entonces tenemos ejecución remota de comandos, y podemos leer la flag: