Werkzeug / Flask Debug
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Erhalte die Perspektive eines Hackers auf deine Webanwendungen, Netzwerke und Cloud
Finde und melde kritische, ausnutzbare Schwachstellen mit echtem Geschäftsauswirkungen. Nutze unsere 20+ benutzerdefinierten Tools, um die Angriffsfläche zu kartieren, Sicherheitsprobleme zu finden, die dir ermöglichen, Privilegien zu eskalieren, und automatisierte Exploits zu verwenden, um wesentliche Beweise zu sammeln, die deine harte Arbeit in überzeugende Berichte verwandeln.
Wenn das Debugging aktiv ist, könntest du versuchen, auf /console
zuzugreifen und RCE zu erlangen.
Es gibt auch mehrere Exploits im Internet wie diesen oder einen in Metasploit.
In einigen Fällen wird der /console
Endpunkt durch einen Pin geschützt. Wenn Sie eine Dateitraversal-Schwachstelle haben, können Sie alle notwendigen Informationen leaken, um diesen Pin zu generieren.
Erzwingen Sie eine Debug-Fehlerseite in der App, um dies zu sehen:
Eine Nachricht bezüglich des Szenarios "Konsole gesperrt" wird angezeigt, wenn versucht wird, auf die Debug-Schnittstelle von Werkzeug zuzugreifen, was auf die Notwendigkeit eines PINs hinweist, um die Konsole zu entsperren. Es wird vorgeschlagen, den Konsolen-PIN auszunutzen, indem der PIN-Generierungsalgorithmus in der Debug-Initialisierungsdatei von Werkzeug (__init__.py
) analysiert wird. Der Mechanismus zur PIN-Generierung kann im Werkzeug-Quellcode-Repository studiert werden, es wird jedoch geraten, den tatsächlichen Servercode über eine Dateitraversal-Sicherheitsanfälligkeit zu beschaffen, um mögliche Versionsunterschiede zu vermeiden.
Um den Konsolen-PIN auszunutzen, werden zwei Variablen-Sets benötigt: probably_public_bits
und private_bits
:
probably_public_bits
username
: Bezieht sich auf den Benutzer, der die Flask-Sitzung initiiert hat.
modname
: Typischerweise als flask.app
bezeichnet.
getattr(app, '__name__', getattr(app.__class__, '__name__'))
: Resolviert in der Regel zu Flask.
getattr(mod, '__file__', None)
: Stellt den vollständigen Pfad zu app.py
im Flask-Verzeichnis dar (z. B. /usr/local/lib/python3.5/dist-packages/flask/app.py
). Wenn app.py
nicht zutrifft, versuchen Sie app.pyc
.
private_bits
uuid.getnode()
: Ruft die MAC-Adresse des aktuellen Geräts ab, wobei str(uuid.getnode())
sie in ein dezimales Format übersetzt.
Um die MAC-Adresse des Servers zu bestimmen, muss die aktive Netzwerkschnittstelle identifiziert werden, die von der App verwendet wird (z. B. ens3
). Bei Unsicherheiten leaken Sie /proc/net/arp
, um die Geräte-ID zu finden, und extrahieren Sie dann die MAC-Adresse aus /sys/class/net/<device id>/address
.
Die Umwandlung einer hexadezimalen MAC-Adresse in dezimal kann wie folgt durchgeführt werden:
get_machine_id()
: Verknüpft Daten aus /etc/machine-id
oder /proc/sys/kernel/random/boot_id
mit der ersten Zeile von /proc/self/cgroup
nach dem letzten Schrägstrich (/
).
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)