hacktricks/generic-methodologies-and-resources/python/python-internal-read-gadgets.md

4.8 KiB

Gadgets de Lectura Interna de Python

{% hint style="success" %} Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks
{% endhint %}

Información Básica

Diferentes vulnerabilidades como Cadenas de Formato en Python o Contaminación de Clases podrían permitirte leer datos internos de Python pero no 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 se configura este secreto.

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

En este caso es posible acceder a este objeto simplemente utilizando cualquier gadget para acceder a objetos globales desde la página de Bypass Python sandboxes.

En el caso en el que la vulnerabilidad se encuentre en un archivo Python diferente, necesitas un gadget para atravesar archivos y llegar al principal para acceder al objeto global app.secret_key y cambiar la clave secreta de Flask y poder escalar privilegios conociendo esta clave.

Una carga útil como esta de este writeup:

{% code overflow="wrap" %}

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

{% endcode %}

Utilice este payload para cambiar app.secret_key (el nombre en su aplicación puede ser diferente) para poder firmar nuevas y más privilegiadas cookies de flask.

Werkzeug - machine_id y node uuid

Utilizando este payload de este informe podrá acceder al machine_id y al nodo uuid, que son los secretos principales que necesita para generar el pin de Werkzeug que puede 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}

{% hint style="warning" %} Ten en cuenta que puedes obtener la ruta local de los servidores al app.py generando algún error en la página web que te proporcione la ruta. {% endhint %}

Si la vulnerabilidad está en un archivo python diferente, revisa el truco anterior de Flask para acceder a los objetos desde el archivo python principal.

{% hint style="success" %} Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks
{% endhint %}