Python Internal Read Gadgets
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.
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:
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:
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ę.
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.
Last updated