Werkzeug / Flask Debug
Setup disponibile istantaneamente per valutazione delle vulnerabilità e penetration testing. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla reportistica. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento e sfruttamento per dare loro più tempo per approfondire, aprire shell e divertirsi.
Console RCE
Se il debug è attivo, potresti provare ad accedere a /console
e ottenere RCE.
Ci sono anche diversi exploit su internet come questo o uno in metasploit.
Protetto da PIN - Traversata del Percorso
In alcune occasioni, l'endpoint /console
sarà protetto da un pin. Se hai una vulnerabilità di traversata del file, puoi leakare tutte le informazioni necessarie per generare quel pin.
Exploit del PIN della Console Werkzeug
Forza una pagina di errore di debug nell'app per vedere questo:
Un messaggio riguardante lo scenario "console bloccata" viene visualizzato quando si tenta di accedere all'interfaccia di debug di Werkzeug, indicando la necessità di un PIN per sbloccare la console. Si suggerisce 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 si consiglia di procurarsi il codice del server effettivo tramite una vulnerabilità di traversamento di file a causa di potenziali discrepanze di versione.
Per sfruttare il PIN della console, sono necessari due set di variabili, probably_public_bits
e private_bits
:
probably_public_bits
probably_public_bits
username
: Si riferisce all'utente che ha avviato la sessione Flask.modname
: Di solito designato comeflask.app
.getattr(app, '__name__', getattr(app.__class__, '__name__'))
: Si risolve generalmente in Flask.getattr(mod, '__file__', None)
: Rappresenta il percorso completo aapp.py
all'interno della directory Flask (ad es.,/usr/local/lib/python3.5/dist-packages/flask/app.py
). Seapp.py
non è applicabile, provareapp.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 es.,
ens3
). In caso di incertezze, 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()
: Concatenando 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