MyCode83/bflask
GitHub: MyCode83/bflask
bflask 是一款高性能的 Flask session cookie 暴力破解与签名工具,用于恢复 SECRET_KEY 并验证、解码或伪造 Flask 会话 cookie。
Stars: 0 | Forks: 0
# bflask



## 基准测试
| 工具 | 耗时 |
|------|------|
| flask-unsign | 677.76s |
| bflask | **48.54s** |

## 安装说明
```
go install github.com/MyCode83/bflask@latest
```
从源码安装:
```
go build .
```
## 使用说明
```
bflask crack \
-c "eyJ1c2VyIjoiYWRtaW4ifQ..." \
-w rockyou.txt \
-t 100
```
JSON 输出:
```
bflask crack -c "$COOKIE" -w keys.txt -j
```
使用 SHA-256 和 timeout:
```
bflask crack -c "$COOKIE" -w keys.txt -d sha256 --timeout 2m
```
将匹配结果写入文件:
```
bflask crack -c "$COOKIE" -w keys.txt -o result.json
```
仅打印恢复出的 `SECRET_KEY`:
```
bflask -q crack -c "$COOKIE" -w keys.txt
```
对 cookie 进行签名并仅打印 cookie 值:
```
bflask -q sign -k supersecret -p '{"user":"admin"}' -s cookie-session -d sha256
```
解码 cookie payload:
```
bflask decode -c "$COOKIE"
```
仅解码原始 payload:
```
bflask -q decode -c "$COOKIE" --raw
```
## 配置
优先级顺序为 `CLI > ENV > CONFIG > DEFAULT`。
示例 `config.yaml`:
```
cookie: ""
wordlist: "./wordlist.txt"
threads: 50
salt: "cookie-session"
digest: "sha1"
verbose: false
timeout: "0s"
output: ""
json: false
quiet: false
```
使用配置文件:
```
bflask --config config.yaml crack
```
环境变量使用 `BFLASK_` 前缀:
```
BFLASK_THREADS=200 BFLASK_DIGEST=sha256 bflask crack -c "$COOKIE" -w keys.txt
```
运行 `bflask --config config.yaml` 时不带任何子命令,将使用配置文件中的值启动 `crack`。
运行 `bflask` 时不带配置文件或子命令,将打印帮助信息。
## Flask Cookies 的工作原理
Flask 的默认 session 将数据存储在客户端,并通过 itsdangerous 使用 `SECRET_KEY` 进行签名。数据未经过加密。如果签名密钥被猜测到,就可以对 payload 进行验证和解码。`bflask` 使用兼容 URLSafeTimedSerializer 的 HMAC 签名来检查候选密钥,默认使用 `cookie-session` salt 和 SHA-1。
压缩的 Flask cookies 以 `.` 开头。当找到有效密钥时,`bflask` 支持解码这些 zlib 压缩的 payload。
## Flask 示例应用
用于生成测试 cookie 的小型应用位于 `examples/flask/app.py`:
```
cd examples/flask
python -m flask --app app run
```
访问 `http://127.0.0.1:5000/`,复制 `session` cookie,并使用包含 `supersecret` 的字典、salt `11`、摘要算法 `sha256` 进行测试。
## 故障排除
`invalid Flask cookie format`:只需传入 cookie 值,不要传入 `session=` 或完整的 `Cookie:` header。
`unsupported digest`:请使用 `sha1`、`sha224`、`sha256`、`sha384`、`sha512` 或 `md5` 之一。
未找到匹配结果:请检查 salt、摘要算法、字典编码,以及目标是否使用了 Flask 默认的签名 session 序列化器。
标签:DOS头擦除, EVTX分析, Flask, Go语言, Web安全, 动态分析, 密码破解, 文档结构分析, 日志审计, 程序破解, 蓝队分析