jinja2模板注入_[Flask(Jinja2)服务端模板注入漏洞(SSTI)]学习简记

0x00  关于Flask框架

https://www.cnblogs.com/hello-there/p/12776502.html

我的这篇文章中简单介绍了Flask框架的基本知识

0x01

参考:

https://www.freebuf.com/column/187845.html

0x02 漏洞相关

1)render_template()用来渲染模板文件,而render_template_string()用来渲染一个字符串.

index_page="

This is index page!

"

return render_template_string(index_page)

2)漏洞形成原因:不正确的使用flask中的render_template_string方法会引发SSTI。

a)下面来看一段存在漏洞的代码:

from flask importFlask,render_template_string,request

app= Flask(__name__)

@app.route(‘/test/‘)deftest():

code= request.args.get(‘id‘) //get方式获取id

html= ‘‘‘

%s

‘‘‘%(code)returnrender_template_string(html)

app.run()

输入[?id=1],页面如下:

1752686de3b797a30e46cfda661347d3.png

输入[?id=],看看什么效果?

e1bfee77ab56efdf43ae1af0ca351a84.png

很明显,造成了xss漏洞.

b)将代码进行修改:

from flask importFlask,render_template_string,request

app= Flask(__name__)

@app.route(‘/test/‘)deftest():

code= request.args.get(‘id‘)

html= ‘‘‘

{{code}}

‘‘‘

return render_template_string(html,code=code)

app.run()

再输入[?id=],查看页面,如下:

194046f244e30083365346db49e2be00.png

可以看到,js代码被原样输出了。这是因为模板引擎一般都默认对渲染的变量值进行编码转义,这样就不会存在xss了。在这段代码中用户所控的是code变量,而不是模板内容。存在漏洞的代码中,模板内容直接受用户控制的。

0x03 SSTI文件读取/命令执行

原文:https://www.cnblogs.com/hello-there/p/12777614.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值