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

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.

python
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:

python
__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:

python
{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