打开是登录界面,看了一下源码,发现一段:
1 | <a class="nav-link" href="/flag">Admin panel</a> |
直接访问回显You have to login first.;
dirsearch扫了一下,没东西。
随便输入,抓包,发现response的 cookie很奇怪:
1 | Set-Cookie: user=IjEi.YJ0wCw.D30Z1pNcejSaIIxNINFDz4E5dGw; Path=/ |
猜测是cookie伪造,然后我就不会啦。
flask-session伪造
Flask处理session逻辑:
session对象->json字符串->base64编码->签名校验
可以通过文件泄露、SSTI模板注入
{{config}}进行读取secret_key,进行伪造签名
即使在无法读取到
secret_key的情况下,也可以通过解密客户端的session进行分析
常用注入:
查找配置文件获取function所处空间下可使用的module、方法以及所有变量:
1 | __class__.__init__.__globals__ |
获取配置信息:
1 | __class__.__init__.__globals__[app].config |
发现secret_key:
1 | SECRET_KEY:fb+wwn!n1yo+9c(9s6!_3o#nqm&&_ej$tez)$_ik36n8d7o6mr#y |
脚本解一下:
1 | from flask import Flask |
得到:ImFkbWluIg.YJ6FsA.r9HHLldbGtTbJojLuURiO8L249U
编辑一下cookie的user提交得到答案。
Python没学,还是理解起来很吃力,不过下学期再学吧。
Tips
1.python后端->ssti->flask
2.admin单独的页面->cookie伪造。
[参考]
http://www.bubuko.com/infodetail-3528100.html
Author: suyumen
Link: https://suyumen.github.io/2021/05/13/2021-05-13-[FBCTF2019]Event/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.