Python Internal Read Gadgets

Wesprzyj HackTricks

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:

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

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}

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ę.

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.

Wesprzyj HackTricks

Last updated