4.9 KiB
Wewnętrzne Gadżety Pythona
{% hint style="success" %}
Dowiedz się i ćwicz Hacking AWS:HackTricks Szkolenie AWS Red Team Expert (ARTE)
Dowiedz się i ćwicz Hacking GCP: HackTricks Szkolenie GCP Red Team Expert (GRTE)
Wesprzyj HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Udostępniaj sztuczki hakerskie, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
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:
{% code overflow="wrap" %}
__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key
{% endcode %}
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}
{% hint style="warning" %}
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ę.
{% 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.
{% hint style="success" %}
Dowiedz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Dowiedz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Wesprzyj HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 Grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Udostępniaj sztuczki hakerskie, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.