hacktricks/generic-methodologies-and-resources/python/python-internal-read-gadgets.md
2024-02-10 13:03:23 +00:00

4.9 KiB

Gadget per la lettura interna di Python

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Informazioni di base

Diverse vulnerabilità come Python Format Strings o Class Pollution potrebbero consentirti di leggere i dati interni di Python ma non eseguire il codice. Pertanto, un pentester dovrà sfruttare al massimo queste autorizzazioni di lettura per ottenere privilegi sensibili ed elevare la vulnerabilità.

Flask - Leggi la chiave segreta

La pagina principale di un'applicazione Flask probabilmente avrà l'oggetto globale app dove questa chiave segreta è configurata.

app = Flask(__name__, template_folder='templates')
app.secret_key = '(:secret:)'

In questo caso è possibile accedere a questo oggetto utilizzando qualsiasi gadget per accedere agli oggetti globali dalla pagina Bypass Python sandboxes.

Nel caso in cui la vulnerabilità si trovi in un file Python diverso, è necessario un gadget per attraversare i file e raggiungere quello principale per accedere all'oggetto globale app.secret_key e cambiare la chiave segreta di Flask, così da poter aumentare i privilegi conoscendo questa chiave.

Un payload come questo da questo writeup:

{% code overflow="wrap" %}

__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key

{% endcode %}

Utilizza questo payload per cambiare app.secret_key (il nome nella tua app potrebbe essere diverso) per poter firmare nuovi e più privilegiati cookie flask.

Werkzeug - machine_id e node uuid

Utilizzando questi payload da questo writeup sarai in grado di accedere al machine_id e all'uuid del nodo, che sono i segnreti principali di cui hai bisogno per generare il pin Werkzeug che puoi utilizzare per accedere alla console python in /console se la modalità di debug è abilitata:

{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}

{% hint style="warning" %} Nota che puoi ottenere il percorso locale del server per app.py generando qualche errore nella pagina web che ti fornirà il percorso. {% endhint %}

Se la vulnerabilità si trova in un file Python diverso, controlla il trucco Flask precedente per accedere agli oggetti dal file Python principale.

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks: