Python Internal Read Gadgets

Reading time: 3 minutes

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

Podstawowe informacje

Różne luki, takie jak Python Format Strings lub Class Pollution, mogą pozwolić na odczyt danych wewnętrznych Pythona, ale nie pozwolą na wykonanie kodu. Dlatego pentester musi maksymalnie wykorzystać te uprawnienia do odczytu, aby uzyskać wrażliwe uprawnienia i eskalować lukę.

Flask - Odczyt klucza tajnego

Główna strona aplikacji Flask prawdopodobnie będzie miała globalny obiekt app, w którym ten sekret jest skonfigurowany.

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

W tym przypadku możliwe jest uzyskanie dostępu do tego obiektu, używając dowolnego gadżetu do uzyskiwania dostępu do obiektów globalnych z strony Bypass Python sandboxes.

W przypadku, gdy vulnerability znajduje się w innym pliku python, potrzebujesz gadżetu do przeszukiwania plików, aby dotrzeć do głównego, aby uzyskać dostęp do obiektu globalnego app.secret_key, aby zmienić klucz tajny Flask i móc eskalować uprawnienia znając ten klucz.

Payload taki jak ten z tego opisu:

python
__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 ciasteczka flask.

Werkzeug - machine_id i node uuid

Używając tych ładunków z tego opisu będziesz mógł uzyskać dostęp do machine_id i uuid węzła, które są głównymi sekretami, których potrzebujesz, aby wygenerować pin Werkzeug, którego możesz użyć do uzyskania dostępu do konsoli pythona w /console, jeśli tryb debugowania jest włączony:

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

warning

Zauważ, że możesz uzyskać lokalną ścieżkę serwera do app.py generując jakiś błąd na stronie internetowej, co da ci ścieżkę.

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

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks