python中class_Python安全之SSTI——Flask/Jinja2

e88a8e45d9da727969b79fd0fb0be52d.png

一、关于SSTI

SSTI(Server Side Template Injection),又称服务端模板注入攻击。其发生在MVC框架中的view层,常见的用于渲染的模板有Twig、FreeMarker、Velocity、Smarty等。

服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而可能导致了敏感信息泄露、代码执行、getShell 等问题。

例如twig的代码:

$output =$twig->render($_GET['custom_email'], array("first_name" =>$user.first_name) );

  如果我们输入custom_email={ {7*7}}则会得到49。关于SSTI漏洞的介绍可见:

c6089b4660771f2fd440ffef7779bbd2.png

https://www.blackhat.com/docs/us-15/materials/us-15-Kettle-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-wp.pdf

二、关于Jinja2

Jinja2 是仿照 Django 模板的一个功能齐全的模板引擎。它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全。

编写示例代码一,将请求输入参数name拼接为模板内容的一部分并进行渲染输出,这里关注Template模块的render方法:

a20c1b6987b2515ee4f112f01fad8daf.png

(:request.url的方式不能导致模板注入了,在最新的flask版本中会自动对request.url进行urlencode,request.args传参)

三、漏洞复现

访问如下链接,被解析成功,说明漏洞的存在:

http://127.0.0.1:5000/?name={ {22*3}}

2113751e0f59ca284c5e86ea94d22a97.png

  而SSTI中主要涉及的漏洞有两个:文件读取和命令执行,这里主讲命令执行。

首先python环境下常用的命令执行方式有以下几种:

os.system()os.po
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值