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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.
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.
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:
__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:
{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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.