首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

FlaskJinja2 开发中遇到的的服务端注入问题研究 II

执行 python Flask-test.py ? 0×02. Flask/Jinja2 开发中的SSTI 利用之任意文件读取 先介绍一些概念 关于类对象 instance....python中类对象有一个属性__mro__, 这个属性返回一个tuple对象,这个对象包含了当前类对象所有继承的基类,tuple中元素的顺序就是MRO(Method Resolution Order)...至此写入文件成功 2 利用Flask Template Globals 中的config上下文对象导入py代码 上一篇《Flask Jinja2开发中遇到的的服务端注入问题研究》中我们提到了render_template_string...这段代码的意思就是将指定的py文件导入,然后将导入的py文件中的大写成员属性加入到config这个上下文对象中(这就是为什么我用RUNCMD了,大写) 先访问: http://10.1.100.3:5000...从执行结果来看,反弹shell下载成功 4 利用config 上下文对象的from_pyfile方法导入反弹shell 我们知道python导入模块的同时也会执行脚本中部分代码(class 和方法的定义不会执行

89260
您找到你想要的搜索结果了吗?
是的
没有找到

一文了解SSTI和所有常见payload 以flask模板为例

http://127.0.0.1:5000可见到欢迎界面 Run/Debug Configuration 中配置 DEBUG 模式 这样每次修改源文件后 , 仅需要保存并且刷新页面就可以看到内容更新了...注意:实际运行环境是不可开启 DEBUG 模式的 , 非常危险 渲染方法 Flask 中的渲染方法有两种 : render_template() 和 render_template_string()...os包含进来,但是渲染仍然会出现这个错误,这就是因为沙盒机制严格地限制了程序的行为 沙箱逃逸的过程简单讲如下 借助的主要是各个类之间的继承关系 一些内建魔术方法如下 __class__:用来查看变量所属的类...这就产生了代码域与数据域的混淆 任意文件读写 这里就要用到上面所说的魔术方法了 仍然是上面这个源码 获取字符串的类对象 >>> ''....,然后使用我们的已知参数调用该对象 与初始RCE相似,这将创建一个python文件/tmp/foo.py并执行print 1337有效负载 {%set%20a,b,c,d,e,f,g,h,i%20=%20request

2.5K11

用 Python 读写 Excel 表格

单元格可以通过工作表键直接访问: >>> cell = ws['A4'] 这个语句将返回 A4 单元格,或者单元格不存在创建它。...另一种方式是使用 cell 方法访问单元格,指定行和列: >>> cell = ws.cell(row=4, column=2, value=10) 注解 工作表创建后,不包含任何单元格,单元格第一次被访问自动创建...使用 rows 属性遍历所有行: >>> ws = wb.active >>> ws['C9'] = 'hello world' >>> tuple(ws.rows) ((...最保险的保存方式是调用 save 方法保存到指定文件: >>> wb = Workbook() >>> wb.save('balances.xlsx') 警告 这个操作将覆盖已存在的文件没有任何提示...= False >>> wb.save('document.xlsx', as_template=False) 保存至流 Flask 、 Django 等 Web 应用,可能需要将文件保存到流(

84420

Flask入门很轻松 (二)

Flask中上下文对象:相当于一个容器,保存Flask 程序运行过程中的一些信息。...比如:请求地址,请求方式,cookie等等 flask 中,可以直接在视图函数中使用 request 这个对象进行获取相关数据,而 request 就是请求上下文的对象保存了当前本次请求的相关数据...中存储一些变量,例如: 应用的启动脚本是哪个文件,启动指定了哪些参数 加载了哪些配置文件,导入了哪些配置 连接了哪个数据库 有哪些可以调用的工具类、常量 当前flask应用在哪个机器上,哪个IP上运行...应用上下文:flask 应用程序运行过程中,保存的一些配置信息,比如程序名、数据库连接、应用信息等 from flask import Flask # 新增一个配置文件,配置文件中设置配置信息 from...别名对象] print( current_app.username ) # 我们可以直接调用app对象所拥有的属性和方法 return "应用上下文" from flask import

34720

Flask】显式应用程序对象和销毁行为以及销毁行为flask项目中的使用

显式应用程序对象 基于WSGI的Python web应用程序必须有一个中央调用对象来实现实际应用程序。Flask中,中心调用对象Flask类的一个实例。...测试,创建一个用于测试特定功能的最小应用程序非常有用。当删除此最小应用程序的应用程序对象,将释放其占用的所有资源。...此外,使用显式对象,可以继承基类(Flask)以方便修改特定函数。如果不使用显式对象,则无法启动。 第二个原因也很重要,那就是Flask需要包名。...您可以Python源文件的第一行或第二行中编写#--coding:utf-8--,以通知解释器编码类型。 Jinja被配置为从UTF-8解码模板文件。因此,确保您的编辑器也以UTF-8保存文件。...如果没有可用的维护人员,请给予Flask核心团队访问权限。

74310

python: BytesIO 中 read 用法

想实现的效果:在后台管理页面中,把提交到后端的图片不保存在 static 文件夹下面,而是通过后端代码把这个文件对象上传到 AWS 的 S3中存储。...通过flask-admin 上传到后端的文件对象的类型是:FileStorage # werkzeug.datastructures.FileStorage# flask 中的 request.files...获取到的类型也是 FileStorage所以先从提交到后端的 form 表单中获取到该文件对象,例如为: img_obj。...(buf)"""从上述代码的最后一行看,fdst.write(buf) ,此时写“文件”的游标已经到“文件”的最后"""我们再来看下面有关 BytesIO 的的一些用法:In [1]: from io...(buf) 写完后,此时游标文件”最后一个位置;而由于 S3 的 upload_fileobj 接口中的第一个参数是file-like object, 而且upload_fileobj会调用 这个

17830

python基础面试题整理---从零开始 每天十题(01)

2,面向对象python里继承和封装较多,而python的多态还是相对较少的(起个不一样的名字不就可以吗....对java的多态表示无奈),从而减少了大量代码的输出。     ...六,Q:如何在python中管理内存 A:python的内存管理是由私有的堆空间管理的,所有的python对象和数据结构都在一个专有的堆,程序员没有访问该堆的权限,只有解释器才能对他进行操作。...python内部使用引用计数,来保持追踪内存中的对象,python内部记录了对象有多少个引用,就是引用计数,当对象被创建就创建了一个引用计数,当对象不再需要的时候,这个对象的引用计数为0,他被垃圾回收...*args没有key值,**kwargs有key值。*args可以当作可容纳多个变量组成的list或tuple。直观一点来点代码吧。 #!...最近忙着弄Flask的源码,写博客的时间不多,过几天整理好了,把基础的工具类,权限,OSS登陆写好以后,我会开源码云上。觉得是可以拆分部署的,不知道真实项目可不可以使用,还在补全注释和代码优化。

45130

浅谈 Python 库的插件系统设计

Flask Flask 说:「本框架什么功能也没有,你上 GitHub 上找啊,那里的扩展又多,说话又好听,只有靠扩展才能勉强生活这样子。」...所以 Flask 的插件系统设计也是相当优秀的,所有的扩展点都收拢到了flask.Flaskapp 对象上,扩展中只用接受到这个对象,然后对它进行一顿改造就完了。...Django Django 扩展方便性上比 Flask 差一些,但它的插件模块自治性非常好。...介绍 Marko 的插件系统前,我们先看看Python-Markdown的扩展方法 Python-Markdown 的扩展方法 我猜没有人给这货写过扩展吧,它的官方文档,几乎什么也没写,要研究怎么写扩展...=[MyExtension]读入扩展对象,将这三个属性取出,合成最终的 parser 和 renderer: self.parser = type("Parser", bases=("BaseParser

23040

Flask学习「一」(按钮,角色,菜单,用户,权限)

FLASK学习 很荣幸有时间能静下心来写在这篇文章,前段时间写了一些没有营养的文章对那些关注我的同学来说非常抱歉,接下来的一段日子里会围绕近期所做的Flask项目写一系列的博客,以记录自己的不足。...4、当在用户页面中选中一个用户,点击用户的“分配权限”按钮,打开展示所有权限的页面(并把用户ID传进去),左边展示所有还没有分配的权限列表,右边展现已经分配的权限列表,然后选择需要分配的左边权限后,点击分配...5、当在权限页面选中一个权限,并点击“分配用户”,处理方式和4相同,当选择需要分配权限的用户后,同样把用户ID和权限ID保存到用户权限表。...6、当在权限页面选中一个权限,并点击“分配菜单”,打开一个树展现所有菜单的页面,每个树节点前面有一个复选框,并把这个权限已经分配的树默认选中,然后在要分配的菜单节点树前面的复选框上选中,最后保存数据,...的子类 namedtuple创建一个和tuple类似的对象 而且对象拥有可访问的属性 普通tuple类型的成员 只能通过索引访问 namedtuple在此基础上还提供了通过名称访问的方式 ’‘’ 我们使用一个命名元组来定义按钮和菜单的树形集合

1.3K20

unittest批量组织依赖用例(一)

总而言之,我们写脚本的目的是以测试脚本测试系统,而不是以系统来测试我们写的测试脚本呀~如果使用你的脚本出了问题,你第一间想的是修复你的脚本,那么就本末倒置啦~ 那么如何设计出一个可复用性高的测试脚本呢...flask import Flask, request,jsonify from flask_cors import * import json class Config(object): DEBUG...不不不,我们今天就换个方法吧~ 我们先写一个requests 方法,我们采用昨天讲过的添加类属性保存依赖值~ 点击查看原文哟~ def requestRun(url, data, method,save...,depence): if depence: data = json.dumps(str(data)% tuple(getattr(Depence,str(i)) for i in...unittest.TestLoader().loadTestsFromTestCase(Testcases) with open(report_file + r'\TestReport.html', 'wb') as f: # 从配置文件中读取

1.2K30

2022网鼎杯一道web复现

/proc/self/cwd 就是当前进程环境的运行目录 flask框架的templates目录是flask的模板渲染目录,渲染模版的时候,默认会从项目根目录下的templates目录下查找模版。...分析 伪造session有了 Administrator 权限可以上传文件后,继续审计代码可以发现后续对上传的文件进行了二次处理以rar压缩文件的形式将保存后的文件解压到某个目录(updir/文件名)下...那么可以构造 updir: /proc/self/cwd ,这样上传的文件保存在了 /proc/self/cwd/文件名的md5.rar ,解压在了 /proc/self/cwd/文件名 这个目录。...但是SUID权限的设置只针对二进制可执行文件,对于非可执行文件设置SUID没有任何意义. ​ 执行过程中,调用者会暂时获得该文件的所有者权限,且该权限只程序执行的过程中有效....通俗的来讲,假设我们现在有一个可执行文件ls,其属主为root,当我们通过非root用户登录,如果ls设置了SUID权限,我们可在非root用户下运行该二进制可执行文件,执行文件,该进程的权限将为

37510

用 Python 实现一个简单的 Web 服务器

运行服务器要运行这个简单的 Web 服务器,只需将以上的代码保存到一个 Python 文件(例如 server.py),然后终端中执行以下命令:python server.py服务器将会开始监听指定的地址和端口...你可以浏览器中输入 http://127.0.0.1:8000 来访问服务器。自定义服务器的行为上述示例中的服务器是非常基本的,它只能返回静态文件,并且没有任何路由功能。... do_GET() 方法中,我们通过调用 self.send_response()、self.send_header() 和 self.end_headers() 方法来设置响应头信息,并通过 self.wfile.write...当访问首页 / ,将会执行 hello() 函数并返回相应的内容。...要运行这个 Flask Web 服务器,只需将以上的代码保存到一个 Python 文件(例如 app.py),然后终端中执行以下命令:python app.pyFlask 服务器将会开始运行,并监听默认的地址

1.6K20

Python 具名元组——我不只是可不变列表

面向对象 日常开发中, 往往离不开关系型数据库对象和缓存, 以往使用 ORM 框架, 受益于 ORM 面向对象的思想, 可以很方便的用 instance.field 方式访问对象属性, 但是转化到缓存..., 特别是类似 Redis 这类只保存字节的缓存, 就失去了对象这一概念....以往我们常常使用字典来"挽回"一点面向对象的思想, 但是如前文引用所示, 不保存字段名的具名元组实例要比字典占用的内存小, 并且获取对象属性要比字典方便多了, 面向对象的思想得到体现....转化为(类)字典对象 日常开发中之所以会使用字典来保存缓存的内容, 很重要的原因是为了方便解析为 json 格式返回....以往的 Python ORM 对象 (如 Flask-SQLALchemy) 如不引用外部框架, 一般也不具备转为键值的能力.

89220
领券