Cracked Flask Lab
与我的所有实验一样,这个实验始于一次测试。该应用使用Python Flask编写,并采用了其默认的会话管理器。
该会话管理器将所有会话信息存储在客户端,因此不仅可以看到存储了关于您的哪些信息,还存在修改它的可能性——唯一的小问题是它受到HMAC的保护。
令牌的格式类似于JWT,但顺序如下:
base64(JSON会话数据) . 编码时间戳 . HMAC
以下是一个示例:
|
|
此处的会话数据解码为:
|
|
生成HMAC需要一个密钥。如果您能够恢复或破解该密钥,就可以对会话信息进行任意修改。在我测试的应用中,这将允许我将权限从普通用户提升为管理员。
为了避免对客户站点进行大量测试来了解这一切的工作原理,更重要的是如何破解密钥,我构建了Cracked Flask实验。
该实验非常简单:当您首次查看页面时,它会设置一个包含上述相同信息的会话cookie。要将您的权限提升为管理员,只需将用户名更改为"admin"。
市面上有不少工具可以帮助完成这个挑战,但我最终选择的是Flask Unsign。它非常易于使用,并且能够非常快速地进行暴力破解密钥。
我包含了如何使用Flask Unsign破解实验密钥然后更新它的详细步骤,但请先尝试自己解决。
访问Cracked Flask Lab或查看GitHub仓库。
操作步骤
- 获取cookie并查看其内容:
|
|
- 尝试破解:
|
|
- 破解成功并获得密钥"monkey",现在创建一个包含用户名admin而不是robin的新cookie:
|
|
- 最后,使用新cookie发出请求:
|
|
如果您想合并最后两个命令:
|
|
或者您可以将签名命令直接放入curl命令中使用反引号。如果尝试此方法,请注意引号:
|
|
如果您只想观看实际操作,这里有一个这些步骤的录制视频。