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命令中使用反引号。如果尝试这样做,请注意引号:
|
|