Werkzeug / Flask Debug
Natychmiastowo dostępna konfiguracja do oceny podatności i testów penetracyjnych. Przeprowadź pełny pentest z dowolnego miejsca z 20+ narzędziami i funkcjami, które obejmują od rekonesansu po raportowanie. Nie zastępujemy pentesterów - rozwijamy niestandardowe narzędzia, moduły wykrywania i eksploatacji, aby dać im z powrotem trochę czasu na głębsze badania, przełamywanie zabezpieczeń i zabawę.
Console RCE
Jeśli debugowanie jest aktywne, 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.
Pin Protected - Path Traversal
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.
Werkzeug Console PIN Exploit
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
probably_public_bits
username
: Odnosi się do użytkownika, który zainicjował sesję Flask.modname
: Zazwyczaj oznaczany jakoflask.app
.getattr(app, '__name__', getattr(app.__class__, '__name__'))
: Zwykle rozwiązuje się do Flask.getattr(mod, '__file__', None)
: Reprezentuje pełną ścieżkę doapp.py
w katalogu Flask (np./usr/local/lib/python3.5/dist-packages/flask/app.py
). Jeśliapp.py
nie jest odpowiedni, spróbujapp.pyc
.
private_bits
private_bits
uuid.getnode()
: Pobiera adres MAC bieżącej maszyny, astr(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 (/
).
Last updated