Werkzeug / Flask Debug
Natychmiastowa konfiguracja dostępna do oceny podatności i testów penetracyjnych. Uruchom pełny test penetracyjny z dowolnego miejsca za pomocą 20+ narzędzi i funkcji, które obejmują rozpoznanie, aż po raportowanie. Nie zastępujemy pentesterów - rozwijamy niestandardowe narzędzia, moduły wykrywania i eksploatacji, aby umożliwić im zagłębienie się głębiej, zdobycie powłok i dobrą zabawę.
Konsola 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 metasploicie.
Zabezpieczenie PIN - Traversal ścieżki
W niektórych sytuacjach punkt końcowy /console
będzie chroniony przez PIN. Jeśli masz podatność na traversal plików, możesz wyciec wszystkie niezbędne informacje do wygenerowania tego PIN-u.
Exploit PIN konsoli Werkzeug
Wymuś stronę błędu debugowania w aplikacji, aby zobaczyć to:
Wiadomość dotycząca scenariusza "zablokowanej konsoli" pojawia się podczas próby dostępu do interfejsu debugowania Werkzeug, wskazując konieczność podania PIN-u do odblokowania konsoli. Sugeruje się wykorzystanie PIN-u konsoli poprzez analizę algorytmu generowania PIN-u w pliku inicjalizacyjnym debugowania Werkzeug (__init__.py
). Mechanizm generowania PIN-u można zbadać w repozytorium kodu źródłowego Werkzeug, chociaż zaleca się pozyskanie rzeczywistego kodu serwera poprzez podatność na wędrówkę po plikach ze względu na potencjalne rozbieżności wersji.
Aby wykorzystać PIN konsoli, potrzebne są dwie grupy zmiennych: probably_public_bits
i private_bits
:
probably_public_bits
probably_public_bits
username
: Odwołuje się do użytkownika, który zainicjował sesję Flask.modname
: Zazwyczaj oznaczany jakoflask.app
.getattr(app, '__name__', getattr(app.__class__, '__name__'))
: Zazwyczaj 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 dostępny, spróbujapp.pyc
.
private_bits
private_bits
uuid.getnode()
: Pobiera adres MAC bieżącego urządzenia, astr(uuid.getnode())
przekształca go do formatu dziesiętnego.Aby określić adres MAC serwera, należy zidentyfikować aktywny interfejs sieciowy używany przez aplikację (np.
ens3
). W przypadku niepewności, wyciek/proc/net/arp
w celu znalezienia identyfikatora urządzenia, a następnie wyodrębnić adres MAC z/sys/class/net/<identyfikator urządzenia>/address
.Konwersję szesnastkowego adresu MAC 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