Python Internal Read Gadgets

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Informations de Base

Différentes vulnérabilités telles que les Chaines de Format Python ou la Pollution de Classe pourraient vous permettre de lire des données internes Python mais ne vous permettront pas d'exécuter du code. Par conséquent, un testeur d'intrusion devra tirer le meilleur parti de ces autorisations de lecture pour obtenir des privilèges sensibles et escalader la vulnérabilité.

Flask - Lire la clé secrète

La page principale d'une application Flask aura probablement l'objet global app où ce secret est configuré.

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

Dans ce cas, il est possible d'accéder à cet objet en utilisant simplement n'importe quel gadget pour accéder aux objets globaux de la page de contournement des sandbox Python.

Dans le cas où la vulnérabilité se trouve dans un fichier Python différent, vous avez besoin d'un gadget pour parcourir les fichiers pour accéder à celui principal afin de accéder à l'objet global app.secret_key pour changer la clé secrète de Flask et pouvoir escalader les privilèges en connaissant cette clé.

Une charge utile comme celle-ci de ce writeup:

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

Utilisez cette charge utile pour changer app.secret_key (le nom dans votre application peut être différent) afin de pouvoir signer de nouveaux cookies flask avec plus de privilèges.

Werkzeug - machine_id et node uuid

En utilisant cette charge utile de ce writeup, vous pourrez accéder à machine_id et à l'uuid du nœud, qui sont les secrets principaux dont vous avez besoin pour générer le code pin Werkzeug que vous pouvez utiliser pour accéder à la console Python dans /console si le mode de débogage est activé:

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

Notez que vous pouvez obtenir le chemin local des serveurs vers le fichier app.py en générant une erreur sur la page web qui vous donnera le chemin.

Si la vulnérabilité se trouve dans un fichier python différent, vérifiez le truc Flask précédent pour accéder aux objets depuis le fichier python principal.

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks:

Dernière mise à jour