Werkzeug / Flask Debug
Last updated
Last updated
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ottieni la prospettiva di un hacker sulle tue app web, rete e cloud
Trova e segnala vulnerabilità critiche e sfruttabili con un reale impatto sul business. Usa i nostri oltre 20 strumenti personalizzati per mappare la superficie di attacco, trovare problemi di sicurezza che ti permettano di elevare i privilegi e utilizzare exploit automatizzati per raccogliere prove essenziali, trasformando il tuo duro lavoro in report persuasivi.
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.
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.
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
username
: Si riferisce all'utente che ha avviato la sessione Flask.
modname
: Di solito designato come flask.app
.
getattr(app, '__name__', getattr(app.__class__, '__name__'))
: Si risolve generalmente in Flask.
getattr(mod, '__file__', None)
: Rappresenta il percorso completo a app.py
all'interno della directory Flask (ad es., /usr/local/lib/python3.5/dist-packages/flask/app.py
). Se app.py
non è applicabile, provare app.pyc
.
private_bits
uuid.getnode()
: Recupera l'indirizzo MAC della macchina corrente, con str(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()
: Concatenates data from /etc/machine-id
or /proc/sys/kernel/random/boot_id
with the first line of /proc/self/cgroup
post the last slash (/
).
Impara e pratica Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)