Python Internal Read Gadgets
Reading time: 3 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundinformationen
Verschiedene Schwachstellen wie Python Format Strings oder Class Pollution könnten es Ihnen ermöglichen, interne Python-Daten zu lesen, aber nicht, Code auszuführen. Daher muss ein Pentester das Beste aus diesen Leseberechtigungen machen, um sensible Berechtigungen zu erlangen und die Schwachstelle auszunutzen.
Flask - Geheimen Schlüssel lesen
Die Hauptseite einer Flask-Anwendung wird wahrscheinlich das app
globale Objekt haben, wo dieses Geheimnis konfiguriert ist.
app = Flask(__name__, template_folder='templates')
app.secret_key = '(:secret:)'
In diesem Fall ist es möglich, auf dieses Objekt zuzugreifen, indem man einfach ein Gadget verwendet, um auf globale Objekte von der Seite zum Umgehen von Python-Sandboxen zuzugreifen.
Im Fall, dass die Schwachstelle in einer anderen Python-Datei liegt, benötigt man ein Gadget, um Dateien zu durchlaufen, um zur Hauptdatei zu gelangen, um auf das globale Objekt app.secret_key
zuzugreifen, um den Flask-Geheimschlüssel zu ändern und in der Lage zu sein, Privilegien zu eskalieren mit diesem Schlüssel.
Ein Payload wie dieser aus diesem Bericht:
__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key
Verwenden Sie diese Payload, um app.secret_key
zu ändern (der Name in Ihrer App könnte anders sein), um neue und privilegiertere Flask-Cookies signieren zu können.
Werkzeug - machine_id und node uuid
Mit diesen Payloads aus diesem Bericht können Sie auf die machine_id und die uuid des Knotens zugreifen, die die Hauptgeheimnisse sind, die Sie benötigen, um den Werkzeug-Pin zu generieren, den Sie verwenden können, um auf die Python-Konsole in /console
zuzugreifen, wenn der Debug-Modus aktiviert ist:
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}
warning
Beachten Sie, dass Sie den lokalen Pfad des Servers zu app.py
erhalten können, indem Sie einen Fehler auf der Webseite erzeugen, der Ihnen den Pfad gibt.
Wenn die Schwachstelle in einer anderen Python-Datei liegt, überprüfen Sie den vorherigen Flask-Trick, um auf die Objekte aus der Haupt-Python-Datei zuzugreifen.
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.