Werkzeug / Flask Debug
Configuración disponible instantáneamente para evaluación de vulnerabilidades y pruebas de penetración. Ejecuta una prueba de penetración completa desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles más tiempo para profundizar, abrir shells y divertirse.
RCE de Consola
Si la depuración está activa, podrías intentar acceder a /console
y obtener RCE.
También hay varios exploits en internet como este o uno en metasploit.
Protegido con PIN - Traversal de Ruta
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.
Exploit de PIN de la Consola Werkzeug
Forzar una página de error de depuración en la aplicación para ver esto:
Un mensaje sobre el escenario de "consola bloqueada" se encuentra al intentar acceder a la interfaz de depuración de Werkzeug, indicando la necesidad 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 desde el repositorio de código fuente de Werkzeug, aunque se recomienda obtener el código del servidor real a través de una vulnerabilidad de traversal 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
probably_public_bits
username
: Se refiere al usuario que inició la sesión de Flask.modname
: Normalmente designado comoflask.app
.getattr(app, '__name__', getattr(app.__class__, '__name__'))
: Generalmente se resuelve como Flask.getattr(mod, '__file__', None)
: Representa la ruta completa aapp.py
dentro del directorio de Flask (por ejemplo,/usr/local/lib/python3.5/dist-packages/flask/app.py
). Siapp.py
no es aplicable, intente conapp.pyc
.
private_bits
private_bits
uuid.getnode()
: Obtiene la dirección MAC de la máquina actual, constr(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/<ID del dispositivo>/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 inclinada (/
).
Última actualización