hacktricks/generic-methodologies-and-resources/python/python-internal-read-gadgets.md
2024-02-11 01:46:25 +00:00

5 KiB

Wewnętrzne narzędzia do odczytu w Pythonie

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Podstawowe informacje

Różne podatności, takie jak Python Format Strings lub Class Pollution, mogą umożliwić odczyt danych wewnętrznych Pythona, ale nie pozwolą na wykonanie kodu. Dlatego pentester będzie musiał jak najlepiej wykorzystać te uprawnienia do odczytu, aby uzyskać poufne uprawnienia i eskalować podatność.

Flask - Odczytaj tajny klucz

Główna strona aplikacji Flask prawdopodobnie będzie miała 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 globalnych obiektów z strony Omijanie piaskownic Pythona.

W przypadku, gdy podatność występuje 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, aby zmienić klucz tajny Flask i móc zwiększyć uprawnienia, 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 payloadu, aby zmienić app.secret_key (nazwa w Twojej aplikacji może być inna), aby móc podpisywać nowe i bardziej uprzywilejowane ciasteczka flask.

Werkzeug - machine_id i node uuid

Korzystając z tego payloadu z tego writeupu będziesz mógł uzyskać dostęp do machine_id i uuid node, które są głównymi sekretami, których potrzebujesz do wygenerowania 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 uda ci się podać ś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.

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: