Python Internal Read Gadgets

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Grundlegende Informationen

Verschiedene Schwachstellen wie Python-Formatzeichenketten oder Klassenverschmutzung können es Ihnen ermöglichen, Python-interne Daten zu lesen, aber keinen 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 enthalten, in dem dieser geheime Schlü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 man ein beliebiges Gadget verwendet, um auf globale Objekte von der Seite Bypass Python Sandboxes zuzugreifen.

Wenn die Schwachstelle in einer anderen Python-Datei liegt, benötigen Sie ein Gadget, um Dateien zu durchsuchen und zur Hauptdatei zu gelangen, um auf das globale Objekt app.secret_key zuzugreifen und den Flask-Schlüssel zu ändern. Dadurch können Sie Berechtigungen eskalieren, indem Sie diesen Schlüssel 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 kann unterschiedlich sein) zu ändern, um neue und privilegierte Flask-Cookies signieren zu können.

Werkzeug - machine_id und node uuid

Mit diesem Payload aus diesem Writeup können Sie auf die machine_id und den uuid-Knoten 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}

Beachten Sie, dass Sie den lokalen Pfad des Servers zur app.py erhalten können, indem Sie auf der Webseite einen Fehler generieren, der Ihnen den Pfad anzeigt.

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.

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated