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

158 lines
12 KiB
Markdown

# Flask
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 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**](https://github.com/sponsors/carlospolop) !
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="../../.gitbook/assets/image (9) (1) (2).png" alt=""><figcaption></figcaption></figure>
Utilisez [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) 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**](../../pentesting-web/ssti-server-side-template-injection/)**.**
## 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](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>
```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 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/" %}
```bash
pip3 install flask-unsign
```
#### **Décoder le Cookie**
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:
```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.
```bash
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.
```bash
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 :
```python
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.
```bash
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.
```bash
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" %}
```bash
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**](../../pentesting-web/sql-injection/sqlmap/#eval) utilise l'option `eval` de sqlmap pour **automatiquement signer les charges utiles de sqlmap** pour Flask en utilisant un secret connu.
<figure><img src="../../.gitbook/assets/image (9) (1) (2).png" alt=""><figcaption></figcaption></figure>
Utilisez [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) 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" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 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**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>