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:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCYJNY!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.
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:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się swoimi trikami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.