Werkzeug / Flask Debug
Sofort verfügbarer Setup für Schwachstellenbewertung & Penetrationstests. Führen Sie einen vollständigen Pentest von überall mit über 20 Tools & Funktionen durch, die von Recon bis Reporting reichen. Wir ersetzen keine Pentester - wir entwickeln maßgeschneiderte Tools, Erkennungs- & Ausnutzungs-Module, um ihnen etwas Zeit zurückzugeben, um tiefer zu graben, Shells zu öffnen und Spaß zu haben.
Console RCE
Wenn das Debugging aktiv ist, könnten Sie versuchen, auf /console
zuzugreifen und RCE zu erlangen.
Es gibt auch mehrere Exploits im Internet wie diesen oder einen in Metasploit.
Pin Geschützt - Pfad Traversierung
In einigen Fällen wird der /console
Endpunkt durch einen Pin geschützt. Wenn Sie eine Dateitraversierungsanfälligkeit haben, können Sie alle notwendigen Informationen leaken, um diesen Pin zu generieren.
Werkzeug Konsole PIN Exploit
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 PIN-Generierungsmechanismus 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
probably_public_bits
username
: Bezieht sich auf den Benutzer, der die Flask-Sitzung initiiert hat.modname
: Typischerweise alsflask.app
bezeichnet.getattr(app, '__name__', getattr(app.__class__, '__name__'))
: Resolviert in der Regel zu Flask.getattr(mod, '__file__', None)
: Stellt den vollständigen Pfad zuapp.py
im Flask-Verzeichnis dar (z. B./usr/local/lib/python3.5/dist-packages/flask/app.py
). Wennapp.py
nicht zutrifft, versuchen Sieapp.pyc
.
private_bits
private_bits
uuid.getnode()
: Ruft die MAC-Adresse des aktuellen Geräts ab, wobeistr(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 (/
).
Last updated