Werkzeug / Flask Debug
Last updated
Last updated
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Uzyskaj perspektywę hakera na swoje aplikacje webowe, sieć i chmurę
Znajdź i zgłoś krytyczne, wykorzystywalne luki w zabezpieczeniach, które mają rzeczywisty wpływ na biznes. Użyj naszych 20+ niestandardowych narzędzi, aby zmapować powierzchnię ataku, znaleźć problemy z bezpieczeństwem, które pozwalają na eskalację uprawnień, oraz użyj zautomatyzowanych exploitów, aby zebrać niezbędne dowody, przekształcając swoją ciężką pracę w przekonujące raporty.
Jeśli debug jest aktywny, możesz spróbować uzyskać dostęp do /console
i zdobyć RCE.
Istnieje również kilka exploitów w internecie, takich jak ten lub jeden w metasploit.
W niektórych przypadkach punkt końcowy /console
będzie chroniony pinem. Jeśli masz vulnerability do przechodzenia przez pliki, możesz wyciekować wszystkie niezbędne informacje do wygenerowania tego pinu.
Wymuś stronę błędu debugowania w aplikacji, aby zobaczyć to:
W przypadku próby uzyskania dostępu do interfejsu debugowania Werkzeug pojawia się komunikat dotyczący scenariusza "console locked", wskazujący na konieczność podania PIN-u w celu odblokowania konsoli. Sugeruje się wykorzystanie PIN-u konsoli poprzez analizę algorytmu generowania PIN-ów w pliku inicjalizacyjnym debugowania Werkzeug (__init__.py
). Mechanizm generowania PIN-ów można zbadać w repozytorium kodu źródłowego Werkzeug, chociaż zaleca się pozyskanie rzeczywistego kodu serwera za pomocą luki w przejściu plików z powodu potencjalnych rozbieżności wersji.
Aby wykorzystać PIN konsoli, potrzebne są dwa zestawy zmiennych, probably_public_bits
i private_bits
:
probably_public_bits
username
: Odnosi się do użytkownika, który zainicjował sesję Flask.
modname
: Zazwyczaj oznaczany jako flask.app
.
getattr(app, '__name__', getattr(app.__class__, '__name__'))
: Zwykle rozwiązuje się do Flask.
getattr(mod, '__file__', None)
: Reprezentuje pełną ścieżkę do app.py
w katalogu Flask (np. /usr/local/lib/python3.5/dist-packages/flask/app.py
). Jeśli app.py
nie jest odpowiedni, spróbuj app.pyc
.
private_bits
uuid.getnode()
: Pobiera adres MAC bieżącej maszyny, a str(uuid.getnode())
przekształca go w format dziesiętny.
Aby określić adres MAC serwera, należy zidentyfikować aktywny interfejs sieciowy używany przez aplikację (np. ens3
). W przypadku niepewności, wycieknij /proc/net/arp
, aby znaleźć identyfikator urządzenia, a następnie wyodrębnij adres MAC z /sys/class/net/<device id>/address
.
Konwersję adresu MAC w formacie szesnastkowym na dziesiętny można wykonać, jak pokazano poniżej:
get_machine_id()
: Łączy dane z /etc/machine-id
lub /proc/sys/kernel/random/boot_id
z pierwszą linią /proc/self/cgroup
po ostatnim ukośniku (/
).
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)