Werkzeug / Flask Debug
Configurazione immediatamente disponibile per valutazione delle vulnerabilità e test di penetrazione. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla segnalazione. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per dare loro più tempo per approfondire, aprire shell e divertirsi.
RCE della Console
Se il debug è attivo, potresti provare ad accedere a /console
e ottenere RCE.
Ci sono anche diversi exploit su internet come questoo uno in metasploit.
Protetto da PIN - Traversal del percorso
In alcune occasioni il /console
endpoint sarà protetto da un pin. Se hai una vulnerabilità di traversal del file, puoi far trapelare tutte le informazioni necessarie per generare quel pin.
Exploit PIN della console Werkzeug
Forza una pagina di errore di debug nell'applicazione per vedere questo:
Un messaggio relativo allo scenario "console bloccata" viene riscontrato quando si tenta di accedere all'interfaccia di debug di Werkzeug, indicando la necessità di un PIN per sbloccare la console. Viene suggerito di sfruttare il PIN della console analizzando l'algoritmo di generazione del PIN nel file di inizializzazione del debug di Werkzeug (__init__.py
). Il meccanismo di generazione del PIN può essere studiato dal repository del codice sorgente di Werkzeug, anche se è consigliabile ottenere il codice effettivo del server tramite una vulnerabilità di attraversamento file a causa di possibili discrepanze di versione.
Per sfruttare il PIN della console, sono necessari due insiemi di variabili, probably_public_bits
e private_bits
:
probably_public_bits
probably_public_bits
username
: Si riferisce all'utente che ha avviato la sessione di Flask.modname
: Tipicamente designato comeflask.app
.getattr(app, '__name__', getattr(app.__class__, '__name__'))
: Generalmente risolve a Flask.getattr(mod, '__file__', None)
: Rappresenta il percorso completo diapp.py
all'interno della directory di Flask (ad esempio,/usr/local/lib/python3.5/dist-packages/flask/app.py
). Seapp.py
non è applicabile, provare conapp.pyc
.
private_bits
private_bits
uuid.getnode()
: Recupera l'indirizzo MAC della macchina corrente, constr(uuid.getnode())
che lo traduce in un formato decimale.Per determinare l'indirizzo MAC del server, è necessario identificare l'interfaccia di rete attiva utilizzata dall'app (ad esempio,
ens3
). In casi di incertezza, leak/proc/net/arp
per trovare l'ID del dispositivo, quindi estrarre l'indirizzo MAC da/sys/class/net/<device id>/address
.La conversione di un indirizzo MAC esadecimale in decimale può essere eseguita come mostrato di seguito:
get_machine_id()
: Concatena i dati da/etc/machine-id
o/proc/sys/kernel/random/boot_id
con la prima riga di/proc/self/cgroup
dopo l'ultima barra (/
).
Last updated