Werkzeug / Flask Debug
Sofort verfügbare Einrichtung für Schwachstellenbewertung und Penetrationstests. Führen Sie einen vollständigen Pentest von überall aus mit 20+ Tools & Funktionen durch, die von der Aufklärung bis zum Bericht reichen. Wir ersetzen keine Pentester - wir entwickeln benutzerdefinierte Tools, Erkennungs- und Exploit-Module, um ihnen etwas Zeit zurückzugeben, um tiefer zu graben, Shells zu öffnen und Spaß zu haben.
Console RCE
Wenn das Debuggen aktiv ist, könnten Sie versuchen, auf /console
zuzugreifen und RCE zu erlangen.
Es gibt auch mehrere Exploits im Internet wie dieser oder einer in Metasploit.
Pin Geschützt - Pfad Traversal
In einigen Fällen wird der /console
Endpunkt durch eine PIN geschützt sein. Wenn Sie eine Dateitraversal-Schwachstelle haben, können Sie alle notwendigen Informationen preisgeben, um diese PIN zu generieren.
Werkzeug Console PIN Exploit
Erzwingen Sie eine Debug-Fehlerseite in der App, um dies zu sehen:
Eine Nachricht bezüglich des Szenarios "Konsole gesperrt" wird beim Versuch, auf die Debug-Schnittstelle von Werkzeug zuzugreifen, angezeigt, was auf die Notwendigkeit einer PIN zur Entsperrung der Konsole hinweist. Es wird vorgeschlagen, die Konsole-PIN auszunutzen, indem der PIN-Generierungsalgorithmus in der Debug-Initialisierungsdatei von Werkzeug (__init__.py
) analysiert wird. Der PIN-Generierungsmechanismus kann aus dem Werkzeug-Quellcode-Repository studiert werden, obwohl empfohlen wird, den tatsächlichen Servercode aufgrund möglicher Versionsunterschiede über eine Dateitraversierbarkeitslücke zu beschaffen.
Um die Konsole-PIN auszunutzen, werden zwei Variablensätze, probably_public_bits
und private_bits
, benötigt:
probably_public_bits
probably_public_bits
username
: Verweist auf den Benutzer, der die Flask-Sitzung initiiert hat.modname
: Typischerweise alsflask.app
bezeichnet.getattr(app, '__name__', getattr(app.__class__, '__name__'))
: Löst im Allgemeinen zu Flask auf.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 zutreffend ist, versuchen Sie es mitapp.pyc
.
private_bits
private_bits
uuid.getnode()
: Ruft die MAC-Adresse des aktuellen Geräts ab, wobeistr(uuid.getnode())
sie in ein Dezimalformat übersetzt.Um die MAC-Adresse des Servers zu ermitteln, 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/<Geräte-ID>/address
.Die Umwandlung einer hexadezimalen MAC-Adresse in Dezimalzahlen 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