Subject
权限问题 flask session
Mind Palace
访问网址:
查看网页源码:
顺势register a user:
可能需要admin权限才可以访问?
看来这里的关键就是如何让自己成为admin => 找到admin账户的密码or欺骗服务器认为自己是admin
在eclipse账户更换密码的网页源码中发现了提示:
登陆网址发现是源码 git clone下来发现是 flask 框架写的“”“”“”“
(・ェ・。) 暂时还没学过 原地螺旋回转再见👋
========================
Two thousand years later ... ... ...
========================
0x01 伪造admin的flask session
在index.html文件中找到关键信息:
只要session的name字段==admin就可以显示出flag的值 => 可以想到去构造session['name']=='admin'的session(在这里就需要用到flask的session的encode&decode工具了)
并且在config.py文件中找到SECRET_KEY:
在eclipse账户中使用BP抓包获得session值:
运用工具decode账户eclipse下的session
修改此session中的name字段值为'admin'并且带着SECRET_KEY => encode出伪造的flask session值
复制得到的session值在eclipse账户下抓包后修改session值得到flag:
0x02 Unicode欺骗
在routes.py文件下的register() login() change()函数中均找到有点不一样的函数:
跟踪到这个函数:
在requirements.txt文件中发现Twisted==10.2.0与最新版差别较大 => 盲猜有问题
查阅必应,大神的wp果然是有问题的
nodeprep.prepare()会进行的转换:
ᴬᴰᴹᴵᴺ -> ADMIN -> admin
并且login的时候会进行一次这个函数并把转换过的name(此刻变成了"ADMIN")存入session中
change的时候再会进行一次这个函数把转换过的name(此刻就变成了"admin")存入session中
Payload:可以注册ᴬᴰᴹᴵᴺ账户 => 登陆一次然后账户变成了ADMIN => 修改一次密码 => session中存入的name字段名字就变成了admin了
登陆login():
修改密码change()后重新用admin+password登陆:
0x03 条件竞争
代码逻辑上的漏洞;
Look Ahead
由于 flask 是非常轻量级的 Web框架 ,其 session 存储在客户端中(可以通过HTTP请求头Cookie字段的session获取),且仅对 session 进行了签名,缺少数据防篡改实现,这便很容易存在安全漏洞
关于如何解析flask的session字段在references最后两个网页中有讨论等有时间再去研究一下
( ̄▽ ̄)~*
Reference:
工具:
关于flask的session问题:
www.leavesongs.com/PENETRATION…
END ヾ(^▽^ヾ)