flask session伪造

工具准备

flask-session-cookie-manager

kali中下载命令:

git clone https://github.com/noraj/flask-session-cookie-manager

基本命令:

解密:

python3 flask_session_cookie_manager3.py decode -c ciphertext -s secret_key

加密:

python3 flask_session_cookie_manager3.py encode -t plaintext -s secret_key

flask-unsign

下载命令:

pip3 install flask-unsign

基本命令:

解密:

flask-unsign --decode --cookie ciphertext

 

flask sesion格式

eyJ1c2VybmFtZSI6eyIgYiI6ImQzZDNMV1JoZEdFPSJ9fQ(数据).ZnRL2A(时间戳).fJHOBVUj0kkWf8-RpzPhm_VvYSs(签名)

时间戳:用来告诉服务端数据最后一次更新的时间,超过31天的会话,将会过期,变为无效会话。

签名:是利用Hmac算法,将session数据和时间戳加上secret_key加密而成的,用来保证数据没有被修改。

只需要知道secret_key便可以轻松地伪造session。所以在做此类题时要去找secret_key。

例题

[NSSRound#13 Basic]flask?jwt?

进去随便注册一个账号登录

发现拿flag需要admin。

看看session

flask-unsign解密得到:

猜测admin的_user_id为1,

接下来是找secret_key,

在忘记密码页面的源代码中发现secret_key。

加密:

抓包,在/getFlag下传session,得到flag。

[CISCN 2019华东南]Web4

进去点击readsomething

发现跳转百度

可以SSRF,发现file伪协议无法使用,查了一下,发现可以用local_file://,读取/app/app.py,得到

secret_key的构造

uuid..getnode()用来得到mac地址,路径为/sys/class/net/eth0/address,local_file://读取文件,得到mac地址02:42:ac:02:9e:a1

编写脚本

import random
random.seed(0x0242ac029ea1)
a=str(random.random()*233)

在python2下运行得到secret_key

将www-data改为fuck并加密

抓包在/flag下发送session得到flag

 

posted @ 2024-06-21 01:15  duskto  阅读(112)  评论(0)    收藏  举报