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

5.8 KiB

Gadgets de Lectura Interna de Python

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Información Básica

Diferentes vulnerabilidades como Python Format Strings o Class Pollution pueden permitirte leer datos internos de Python pero no te permitirán ejecutar código. Por lo tanto, un pentester deberá 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 usando cualquier gadget para acceder a objetos globales de la página Bypass Python sandboxes.

En el caso en que la vulnerabilidad se encuentre en un archivo Python diferente, se necesita un gadget para recorrer archivos y llegar al archivo principal para acceder al objeto global app.secret_key y cambiar la clave secreta de Flask y así 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 esta carga útil 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

Usando estas cargas útiles de este artículo 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 del servidor al archivo app.py generando algún error en la página web que te proporcione la ruta. {% endhint %}

Si la vulnerabilidad se encuentra en un archivo Python diferente, revisa el truco anterior de Flask para acceder a los objetos desde el archivo Python principal.

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥