1、easy_flask
百度了下什么是flask,flask是一款非常流行的python web框架。
2、尝试步骤
(1)、搜索博文,查看该题是如何破解的
先注册账号,登录自己注册的账号,查看可访问内容(可以查看到部分源码,如app.py文件,泄露了flask的session加密秘钥),可以查看到当前用户的角色名称,管理员(admin)的角色名称;F12查看session结构(可以看到session放在了cookie中),使用flask的token生成规则解编码,尝试普通用户越权到管理员admin角色;越权到管理员角色后,发现有个下载功能,F12查看下载格式后,尝试下载已知的app.py源文件,查看文件发下eval(),可以远程执行系统命令。
(2)、自己注册的账号登录
如上图所示,点击“leran”,可以在线预览部分源代码,可以确认session编解码规则。
F12--》网络,可以查看Cookie中的session。
如下图所示,在github上获取flask-session的编解码源代码,将获取的session进行解码,以便查看session的结构。
mirrors / noraj / flask-session-cookie-manager · GitCode
(3)、将下载文件置于kali桌面进行编解码
发现session结构如下:{'loggedin':True,'role':'user','username':'abc'}
猜测构造admin结构的session如下:{'loggedin':True,'role':'admin','username':'admin'}
编码后获得session的值,但是不清楚如何放到cookie里面去,F12时,无法修改已知cookie的值。
(4)、修改cookie中session的值
使用浏览器自带组件,搜索cookie,添加“Cookie Editor”组件后,F12后,可以新增cookie信息。
如上图所示,添加新的cookie信息后,在访问地址栏按回车,重新访问网页,发现返回到了登录页面,why?为啥不对呢?
再次浏览器下Cookie Editor,发现有2个session信息,一个普通用户登录的session,一个自己新增的管理员角色session,删除普通用户对应的session,再在地址栏回车,发现页面变成了如上截图所示。
(5)、下载app.y源代码文件
如下图所示,新出现了个下载功能,F12--》查看器,查看文件下载格式如下图所示。
尝试下载app.y源文件,下载成功。
如下图所示,审计app.y源代码,发现有eval()可以执行远程命令。
(6)、尝试访问执行远程命令
尝试访问/hello/?eval=system('ls /'),结果只输出了hello,
又麻瓜了!!
再百度,尝试访问/hello/?eval=__import__("os").popen("ls /").read()
如上图所示,看到根目录下有个flag_is_h3re文件,猜测是flag文件,查看看看,
尝试访问/hello/?eval=__import__("os").popen("cat /f*").read()
3、其他修改Cookie的方法
最后发下hackBar也可以给当前访问设置Cookie信息,操作如下图所示。
另外一种,是火狐浏览器搜索ModHeader组件,也可以设置Cookie信息。