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

12 KiB

Flask

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Utilisez Trickest pour construire et automatiser des workflows alimentés par les outils communautaires les plus avancés au monde.
Obtenez un accès aujourd'hui :

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

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

Cookies

Le nom de session par défaut pour les cookies 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-le 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, forcer par la méthode brute et créer des cookies de session d'une application Flask en devinant les clés secrètes.

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

pip3 install flask-unsign

To decode a cookie, you can use various tools and techniques. One common method is to use a base64 decoder to decode the cookie value. Base64 encoding is commonly used to encode binary data into ASCII characters, and it is often used to encode cookie values.

Here is an example of how you can decode a cookie using Python:

import base64

def decode_cookie(cookie):
    decoded_cookie = base64.b64decode(cookie)
    return decoded_cookie.decode('utf-8')

cookie_value = 'SGVsbG8gV29ybGQh'
decoded_value = decode_cookie(cookie_value)
print(decoded_value)

In this example, we import the base64 module and define a function called decode_cookie that takes a cookie value as input. The function uses the b64decode function from the base64 module to decode the cookie value. We then return the decoded value as a UTF-8 encoded string.

We create a variable called cookie_value and assign it the value of the cookie we want to decode. We then call the decode_cookie function with cookie_value as the argument and assign the returned decoded value to a variable called decoded_value. Finally, we print the decoded value.

Keep in mind that decoding a cookie does not necessarily mean you will be able to understand its contents. Cookies can be encrypted or encoded in various ways, so decoding a cookie may not always provide meaningful information. It is important to analyze the decoded value and understand the context in which the cookie is used to gain insights from it.

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

Brute Force

La technique de Brute Force est une méthode d'attaque utilisée pour essayer toutes les combinaisons possibles de mots de passe jusqu'à ce que le bon soit trouvé. C'est une approche simple mais efficace pour contourner les mesures de sécurité et accéder à un système ou à un compte. Les attaquants utilisent souvent des outils automatisés pour effectuer des attaques de force brute, ce qui leur permet de tester rapidement de nombreuses combinaisons en peu de temps. Pour se protéger contre les attaques de force brute, il est important d'utiliser des mots de passe forts et de mettre en place des mesures de sécurité supplémentaires telles que des verrouillages de compte après un certain nombre de tentatives infructueuses.

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

Signature

Une signature est une méthode utilisée pour vérifier l'intégrité et l'authenticité des données. Elle est généralement utilisée pour s'assurer qu'un message n'a pas été modifié pendant le transit et qu'il provient bien de la source prétendue.

Dans le contexte du développement web, la signature est souvent utilisée pour protéger les cookies de session. Lorsqu'un cookie est signé, il est crypté avec une clé secrète et une signature est ajoutée pour vérifier son intégrité. Lorsque le serveur reçoit le cookie, il peut vérifier la signature pour s'assurer que le cookie n'a pas été modifié.

Flask, un framework web populaire en Python, fournit une fonctionnalité intégrée pour signer les cookies. Pour signer un cookie dans Flask, vous pouvez utiliser la méthode set_signed_cookie() de l'objet response. Cette méthode prend le nom du cookie, sa valeur et une clé secrète comme arguments.

Voici un exemple de code qui signe un cookie dans Flask :

from flask import Flask, make_response

app = Flask(__name__)

@app.route('/')
def index():
    response = make_response('Hello, World!')
    response.set_signed_cookie('session', '123456', secret='mysecretkey')
    return response

if __name__ == '__main__':
    app.run()

Dans cet exemple, le cookie de session est signé avec la clé secrète "mysecretkey". Lorsque le client envoie le cookie au serveur, Flask vérifie la signature pour s'assurer que le cookie n'a pas été modifié.

La signature des cookies est une mesure de sécurité importante pour protéger les données sensibles des utilisateurs. Il est essentiel de choisir une clé secrète forte et de garder cette clé confidentielle pour éviter toute compromission de la signature.

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

Signature en utilisant des versions obsolètes (anciennes versions)

Lors de l'évaluation de la sécurité d'une application Flask, il est important de vérifier si elle utilise des versions obsolètes qui pourraient présenter des vulnérabilités connues. Les versions obsolètes de Flask peuvent être sujettes à des attaques de contournement de sécurité ou à des failles connues qui pourraient être exploitées par des attaquants.

Pour identifier si une application Flask utilise une version obsolète, vous pouvez effectuer les étapes suivantes :

  1. Recherchez la version de Flask utilisée par l'application. Cela peut être trouvé dans le fichier requirements.txt ou dans le fichier setup.py de l'application.

  2. Comparez la version de Flask avec la dernière version disponible sur le site officiel de Flask. Si la version utilisée par l'application est inférieure à la dernière version disponible, cela indique qu'elle utilise une version obsolète.

  3. Consultez la documentation de Flask pour identifier les vulnérabilités connues dans les versions obsolètes. Si des vulnérabilités sont répertoriées pour la version utilisée par l'application, cela indique un risque potentiel.

Si vous identifiez l'utilisation d'une version obsolète de Flask, il est recommandé de mettre à jour l'application vers la dernière version stable. Les mises à jour de Flask incluent souvent des correctifs de sécurité importants qui peuvent prévenir les attaques connues.

Il est également important de noter que la mise à jour de Flask peut nécessiter des modifications dans le code de l'application pour s'adapter aux nouvelles fonctionnalités ou aux changements de comportement. Par conséquent, il est recommandé de tester soigneusement l'application après la mise à jour pour s'assurer qu'elle fonctionne correctement.

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

RIPsession

Outil en ligne de commande pour effectuer une attaque par force brute sur des sites web en utilisant des cookies créés avec 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

Cet exemple utilise l'option eval de sqlmap pour automatiquement signer les charges utiles de sqlmap pour Flask en utilisant un secret connu.

Utilisez Trickest pour créer et automatiser facilement des flux de travail alimentés par les outils communautaires les plus avancés au monde.
Obtenez un accès aujourd'hui :

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

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥