hacktricks/generic-methodologies-and-resources/python/python-internal-read-gadgets.md

4.9 KiB

Wewnętrzne Gadżety Pythona

{% hint style="success" %} Dowiedz się i ćwicz Hacking AWS:HackTricks Szkolenie AWS Red Team Expert (ARTE)
Dowiedz się i ćwicz Hacking GCP: HackTricks Szkolenie GCP Red Team Expert (GRTE)

Wesprzyj HackTricks
{% endhint %}

Podstawowe Informacje

Różne podatności takie jak Python Format Strings lub Zanieczyszczenie Klasy mogą umożliwić Ci odczytanie wewnętrznych danych Pythona, ale nie pozwolą na wykonanie kodu. Dlatego pentester będzie musiał jak najlepiej wykorzystać te uprawnienia do uzyskania poufnych przywilejów i eskalacji podatności.

Flask - Odczytaj klucz tajny

Główna strona aplikacji Flask prawdopodobnie będzie zawierać obiekt globalny app, w którym jest skonfigurowany ten tajny klucz.

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

W tym przypadku możliwe jest uzyskanie dostępu do tego obiektu za pomocą dowolnego gadżetu do dostępu do obiektów globalnych z strony Omijanie piaskownic Pythona.

W przypadku, gdy podatność znajduje się w innym pliku pythona, potrzebujesz gadżetu do przeglądania plików, aby dotrzeć do głównego pliku i uzyskać dostęp do globalnego obiektu app.secret_key w celu zmiany klucza sekretnego Flask i możliwości eskalacji uprawnień znając ten klucz.

Payload taki jak ten z tego opisu:

{% code overflow="wrap" %}

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

{% endcode %}

Użyj tego ładunku, aby zmienić app.secret_key (nazwa w Twojej aplikacji może być inna), aby móc podpisywać nowe i bardziej uprzywilejowane pliki cookie flask.

Werkzeug - machine_id i node uuid

Za pomocą tych ładunków z tego opisu będziesz mógł uzyskać dostęp do machine_id i uuid node, które są głównymi sekretami, których potrzebujesz do generowania pinu Werkzeug, który możesz użyć do uzyskania dostępu do konsoli pythona w /console, jeśli tryb debugowania jest włączony:

{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}

{% hint style="warning" %} Zauważ, że możesz uzyskać lokalną ścieżkę serwera do pliku app.py generując błąd na stronie internetowej, co spowoduje, że otrzymasz ścieżkę. {% endhint %}

Jeśli podatność znajduje się w innym pliku pythona, sprawdź poprzedni trik Flask, aby uzyskać dostęp do obiektów z głównego pliku pythona.

{% hint style="success" %} Dowiedz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Dowiedz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wesprzyj HackTricks
{% endhint %}