![Python安全攻防:渗透测试实战指南](https://wfqqreader-1252317822.image.myqcloud.com/cover/862/33892862/b_33892862.jpg)
上QQ阅读APP看书,第一时间看更新
3.2.1 Flask服务器模板环境搭建
Flask是一个使用Python编写的轻量级Web应用框架,使用BSD授权。其WSGI工具箱采用Werkzeug,模板引擎则使用Jinja2。
Flask属于微框架(micro-framework),这既是优点也是缺点,优点是框架轻量,更新依赖少,更容易专注于安全方面的漏洞,缺点是不得不通过添加插件来增加依赖列表。Flask依赖中就有造成模板注入漏洞的插件Jinja2的模板引擎,Jinja2是一个面向Python的模板语言。
可通过wget或GitHub直接下载,可根据具体需求选择合适的下载方式。我们通过Docker(见公众号链接3-1)可以很方便地将漏洞复现环境搭建出来:
Docker-compose build // 编译下载漏洞环境所需的配置 Docker-compose up -d // 启动漏洞环境
安装完成后,访问“本机地址:8000端口”,出现如图3-1所示的界面,代表漏洞环境已经启动成功。
![](https://epubservercos.yuewen.com/DEF3B5/18123624101956106/epubprivate/OEBPS/Images/3a1.jpg?sign=1738999452-xVlJMYsrEeEBUydtnuEmFBarUH6POFLx-0-6c76c5aba1bd13ea3a1f3421c2d7099f)
图3-1 访问漏洞页面
首先让我们来看一下漏洞Web服务的代码,源代码位于app目录下的app.py文件中,如下所示:
![](https://epubservercos.yuewen.com/DEF3B5/18123624101956106/epubprivate/OEBPS/Images/044-2-i.jpg?sign=1738999452-nDDpekIynqDYQFPpkHWccAp2E4tBEyb8-0-cddc38a910b17e272fce22fc62d82dce)
![](https://epubservercos.yuewen.com/DEF3B5/18123624101956106/epubprivate/OEBPS/Images/045-i.jpg?sign=1738999452-WeAfCdvkvoMnotbQoc5158BiIb0MriEw-0-73131c72dec2f9250a620ec22d67baa0)
从这里可以看出name的值是直接从get参数中获取的,所以Template是完全可控的。要测试漏洞是否存在,要看能否执行Jinja2模板语言。这里测试一下能否将模板语言传递到参数中,如图3-2所示。
![](https://epubservercos.yuewen.com/DEF3B5/18123624101956106/epubprivate/OEBPS/Images/3a2.jpg?sign=1738999452-08P1TszrCnq2X6ulFnD61B9J9y63HR9G-0-08c2851d2cf4951d5c54ee0f77e16165)
图3-2 验证漏洞
这里表示Jinja2是可以执行的。使用Pocsuite编写漏洞验证POC时,需要按照官方模板进行编写,对接API接口能很方便地完成POC脚本。POC的命名形式为:“组成漏洞应用名_版本号_漏洞类型名称”,然后把文件名中所有字母改成小写,所有的符号改成下划线“_”。文件名中不能有特殊字符和大写字母,最后形成的文件名应该像这样:_1847_seeyon_3_1_login_info_disclosure.py。