Python Internal Read Gadgets

Unterstützen Sie HackTricks

Grundlegende Informationen

Verschiedene Schwachstellen wie Python-Formatzeichenfolgen oder Klassenverschmutzung könnten es Ihnen ermöglichen, interne Python-Daten zu lesen, aber nicht, Code auszuführen. Daher muss ein Pentester diese Leseberechtigungen bestmöglich nutzen, um sensible Berechtigungen zu erhalten und die Schwachstelle zu eskalieren.

Flask - Geheimen Schlüssel lesen

Die Hauptseite einer Flask-Anwendung wird wahrscheinlich das app-globale Objekt haben, in dem dieser Geheimschlüssel konfiguriert ist.

app = Flask(__name__, template_folder='templates')
app.secret_key = '(:secret:)'

In diesem Fall ist es möglich, auf dieses Objekt zuzugreifen, indem einfach ein Gadget verwendet wird, um globale Objekte zuzugreifen von der Bypass Python sandboxes page.

Im Fall, dass die Schwachstelle in einer anderen Python-Datei liegt, benötigen Sie ein Gadget, um Dateien zu durchsuchen, um zur Hauptdatei zu gelangen, um auf das globale Objekt app.secret_key zuzugreifen, um den Flask Secret Key zu ändern und in der Lage zu sein, Berechtigungen zu eskalieren und diesen Schlüssel zu kennen.

Ein Payload wie dieser aus diesem Writeup:

__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key

Verwenden Sie dieses Payload, um app.secret_key (der Name in Ihrer App könnte anders sein) zu ändern, um neue und mehr Berechtigungen für Flask-Cookies signieren zu können.

Werkzeug - machine_id und node uuid

Verwenden Sie diese Payload aus diesem Writeup, um auf die machine_id und den uuid-Knoten zuzugreifen, 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}

Beachten Sie, dass Sie den lokalen Pfad des Servers zur app.py erhalten können, indem Sie auf der Webseite einen Fehler 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.

Unterstützen Sie HackTricks

Last updated