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],页面如下:
输入[?id=],看看什么效果?
很明显,造成了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=],查看页面,如下:
可以看到,js代码被原样输出了。这是因为模板引擎一般都默认对渲染的变量值进行编码转义,这样就不会存在xss了。在这段代码中用户所控的是code变量,而不是模板内容。存在漏洞的代码中,模板内容直接受用户控制的。
0x03 SSTI文件读取/命令执行
原文:https://www.cnblogs.com/hello-there/p/12777614.html