Werkzeug / Flask Debug
Last updated
Last updated
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)
Obtén la perspectiva de un hacker sobre tus aplicaciones web, red y nube
Encuentra y reporta vulnerabilidades críticas y explotables con un impacto real en el negocio. Usa nuestras más de 20 herramientas personalizadas para mapear la superficie de ataque, encontrar problemas de seguridad que te permitan escalar privilegios y usar exploits automatizados para recopilar evidencia esencial, convirtiendo tu arduo trabajo en informes persuasivos.
Si el modo de depuración está activo, podrías intentar acceder a /console
y obtener RCE.
También hay varios exploits en internet como este o uno en metasploit.
En algunas ocasiones, el endpoint /console
estará protegido por un pin. Si tienes una vulnerabilidad de traversal de archivos, puedes filtrar toda la información necesaria para generar ese pin.
Forzar una página de error de depuración en la aplicación para ver esto:
Un mensaje sobre el escenario "consola bloqueada" se encuentra al intentar acceder a la interfaz de depuración de Werkzeug, indicando un requisito de un PIN para desbloquear la consola. Se sugiere explotar el PIN de la consola analizando el algoritmo de generación de PIN en el archivo de inicialización de depuración de Werkzeug (__init__.py
). El mecanismo de generación de PIN se puede estudiar en el repositorio de código fuente de Werkzeug, aunque se aconseja obtener el código del servidor real a través de una vulnerabilidad de recorrido de archivos debido a posibles discrepancias de versión.
Para explotar el PIN de la consola, se necesitan dos conjuntos de variables, probably_public_bits
y private_bits
:
probably_public_bits
username
: Se refiere al usuario que inició la sesión de Flask.
modname
: Generalmente designado como flask.app
.
getattr(app, '__name__', getattr(app.__class__, '__name__'))
: Generalmente se resuelve en Flask.
getattr(mod, '__file__', None)
: Representa la ruta completa a app.py
dentro del directorio de Flask (por ejemplo, /usr/local/lib/python3.5/dist-packages/flask/app.py
). Si app.py
no es aplicable, intente app.pyc
.
private_bits
uuid.getnode()
: Obtiene la dirección MAC de la máquina actual, con str(uuid.getnode())
traduciéndola a un formato decimal.
Para determinar la dirección MAC del servidor, se debe identificar la interfaz de red activa utilizada por la aplicación (por ejemplo, ens3
). En casos de incertidumbre, filtrar /proc/net/arp
para encontrar el ID del dispositivo, luego extraer la dirección MAC de /sys/class/net/<device id>/address
.
La conversión de una dirección MAC hexadecimal a decimal se puede realizar como se muestra a continuación:
get_machine_id()
: Concatena datos de /etc/machine-id
o /proc/sys/kernel/random/boot_id
con la primera línea de /proc/self/cgroup
después de la última barra (/
).
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)