首页 > 其他 > 详细

从0学习Flask模板注入(SSTI)

时间:2021-09-01 18:00:55      阅读:16      评论:0      收藏:0      [点我收藏+]

0x01 前言

最近在刷题的过程中发现服务端模板注入的题目也比较常见,这类注入题目都比较类似,区别就在于不同的框架、不同的过滤规则可能需要的最终payload不一样,本文将以Flask为例学习模板注入的相关知识,也是对自己学习的一个记录。

0x02 Flask简介

Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。优点就在于开发简单,代码量少,很多工作都在框架中被实现了。他与Django不同于Django是一个全能型框架,通常用于编写大型的网站。
而jinjia2、template、Mako等等都属于为框架提供功能支持的引擎,各有优缺点,也不是我们主要学习的内容。但我们要知道Flask默认使用的引擎为jinjia2,本文也会主要分析jinjia2中的注入问题。
首先配置flask与jinjia2引擎环境:

pip3 install flask
pip3 install jinjia2

这时使用python -c "import flask"回显无报错信息,证明需要的环境已经安装完毕,下面从一个最简单的flask例子开始学起。

#flaskapp.py
from flask import *
from jinja2 import *
app = Flask(__name__)  # 创建FLask类
@app.route("/")  #设置的默认路由
def index(): #默认的视图函数,与路由绑定,用来处理用户访问网站跟目录/时的情况
    name = request.args.get(‘name‘, ‘guest‘)#接受参数名为name 的参数传入
    html = ‘‘‘
    <h3>your input %s</h3>
    ‘‘‘%name #设置一个模板html,将name的值以%s输出
    return render_template_string(html) #将html以字符串模板的形式渲染
    #对应的,当html是一个文件时,使用render_template 函数来渲染一个指定的文件
if __name__==‘__main__‘: #作为主文件启动时
    app.run(debug = True)  #以debug模式运行

通过对上面简单例子的注释解释,可以看出,一个完整简单的Flask框架,由一个或很多个路由(route)、绑定的视图函数组成,而视图函数则用来对用户访问的这个路由进行处理,包括接收参数、创建模板、渲染,等等操作,对我们来说,容易出现问题的就在于render渲染的过程中没有对用户的输入进行限制与过滤,导致恶意的代码被注入,执行了用户输入的代码。
当需要不断的修改代码时,建议开启debug模式,否则每次修改都需要重新启动py文件,比较麻烦,启动debug模式使用下面的语句。

技术分享图片

从0学习Flask模板注入(SSTI)

原文:https://www.cnblogs.com/zhiganglang/p/15212477.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!