Python Internal Read Gadgets
Reading time: 3 minutes
tip
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a HackTricks y HackTricks Cloud repos de github.
Información Básica
Diferentes vulnerabilidades como Python Format Strings o Class Pollution podrían permitirte leer datos internos de python pero no te permitirán ejecutar código. Por lo tanto, un pentester necesitará aprovechar al máximo estos permisos de lectura para obtener privilegios sensibles y escalar la vulnerabilidad.
Flask - Leer clave secreta
La página principal de una aplicación Flask probablemente tendrá el objeto global app
donde esta secreta está configurada.
app = Flask(__name__, template_folder='templates')
app.secret_key = '(:secret:)'
En este caso, es posible acceder a este objeto utilizando cualquier gadget para acceder a objetos globales de la página de Bypass Python sandboxes.
En el caso de que la vulnerabilidad esté en un archivo python diferente, necesitas un gadget para recorrer archivos y llegar al principal para acceder al objeto global app.secret_key
para cambiar la clave secreta de Flask y poder escalar privilegios conociendo esta clave.
Una carga útil como esta de este informe:
__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key
Utiliza esta carga útil para cambiar app.secret_key
(el nombre en tu aplicación podría ser diferente) para poder firmar nuevas y más privilegiadas cookies de flask.
Werkzeug - machine_id y node uuid
Usando estas cargas útiles de este informe podrás acceder al machine_id y al uuid del nodo, que son los secretos principales que necesitas para generar el pin de Werkzeug que puedes usar para acceder a la consola de python en /console
si el modo de depuración está habilitado:
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}
warning
Tenga en cuenta que puede obtener la ruta local del servidor al app.py
generando algún error en la página web que le dará la ruta.
Si la vulnerabilidad está en un archivo python diferente, consulte el truco de Flask anterior para acceder a los objetos desde el archivo python principal.
tip
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a HackTricks y HackTricks Cloud repos de github.