Python Internal Read Gadgets
Reading time: 3 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.
Informations de base
Différentes vulnérabilités telles que Python Format Strings ou Class Pollution pourraient vous permettre de lire des données internes de python mais ne permettront pas d'exécuter du code. Par conséquent, un pentester devra tirer le meilleur parti de ces permissions 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ù cette clé secrète est configurée.
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 depuis la page de contournement des sandboxes Python.
Dans le cas où la vulnérabilité se trouve dans un fichier python différent, vous avez besoin d'un gadget pour traverser les fichiers afin d'atteindre le principal pour accéder à l'objet global app.secret_key
afin de changer la clé secrète de Flask et pouvoir escalader les privilèges en connaissant cette clé.
Un payload comme celui-ci provenant de cette analyse:
__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key
Utilisez ce payload 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 ces payloads de cet article, vous pourrez accéder au machine_id et au uuid node, qui sont les principaux secrets dont vous avez besoin pour générer le pin Werkzeug que vous pouvez utiliser pour accéder à la console python dans /console
si le mode debug est activé :
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}
warning
Notez que vous pouvez obtenir le chemin local du serveur vers le 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 autre fichier python, vérifiez le truc Flask précédent pour accéder aux objets depuis le fichier python principal.
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.