python的web框架的tornado和flask模块注入

一:tornado的基本介绍:

Tornado就是在 FriendFeed 的 Web 服务器及其常用工具的开源版本 。Tornado 和主流 Web 服务器框架(包括大多数 Python的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。

具体使用可参考:python笔记(tornado初识)_背后——NULL的博客-CSDN博客_python tornado

漏洞实例:攻防世界easytornado

打开网页发现内容如下:

观察到url的filename,filehash似乎是账号和密码

 把filename改为/fllllllllllllag后发现显示错误界面,即我们要寻找密码filehash

 同时发现Error似乎可以更改,类似注入的东西

再浏览其他文件

 经过百度查询可知,render为tornado的一个模块,类似于模板的东西,可通过不同的参数来访问网页。即{{}}的显示调用参数。

而下方的文件则是说明了filehash怎么获取,cookie+MD5加密后的filename,再次MD5加密。

即最主要的是render注入。

可通过{{handler.settings}}注入,具体原理Tornado小记 -- 模板中的Handler(看不太懂)

即可获取ookie——secret

最后通过MD5加密/fllllllllllllag

cookie_secret+上述密文,再次MD5加密

回到flag.txt页面,更改url内容即可正确进入

二:flask模块注入(攻防世界shrine):

        代码审计

观察到/shrine 路径可注入,会通过flask.render这个模块返回值,但是safe_jinja这个函数会过滤掉含config,self的字符。

涉及到python内置函数get_flashed_messages和url_for。

        get_flashed_messages:

可闪现(显示)后续要显示的内容,

构造playload:        /shrine/{{get_flashed_message.__globals__}}  (globals前后为双下划线)

显示所有函数类型,如下:

找到flask类型这个

直接访问

然后从中使用config访问FLAG

构造playload: /shrine/{{get_flashed_messages.__globals__['current_app'].config['FLAG']}}

         url_for:

1.url_for()作用:
(1)给指定的函数构造 URL。
(2)访问静态文件(CSS / JavaScript 等)。 只要在你的包中或是模块的所在目录中创建一个名为 static 的文件夹,在应用中使用 /static 即可访问。

我们用到的是第一点。

即可以通过构造url的形式返回执行的内容

构造playload: /shrine/{{url_for.__globals__}}

显示所有函数(与上面一样za):

 

再找到current_app,使用其访问flag

构造playload: /shrine/{{url_for.__globals__['current_app'].config['FLAG']}}

获取到flag:

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tornado是一个Python后端框架,它采用异步非阻塞的方式处理网络请求。它的执行流程可以按照以下步骤进行: 1. 导入Tornado相关模块和类库,如tornado.ioloop、tornado.web等。 2. 创建一个处理请求的handler类,并继承tornado.web.RequestHandler类。在handler类中定义处理请求的方法,如get、post等。 3. 创建一个Tornado应用(Application)对象,并配置路由,将URL与handler类对应起来。 4. 启动Tornado服务,监听指定的端口。 5. 当有请求到达时,Tornado会创建一个handler对象来处理该请求。根据请求的URL匹配到对应的handler类,并执行相应的处理方法。在执行过程中,Tornado采用异步非阻塞的方式处理网络请求,利用事件循环(IOLoop)来实现高效的IO操作。 6. 在handler方法中,可以调用相关的方法来处理请求,如self.write()用于返回响应内容,self.finish()用于关闭连接等。 7. 最后,Tornado会返回响应给客户端。整个过程是非阻塞的,可以同时处理多个请求,提高系统的性能和并发能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [PythonWEB框架Tornado](https://blog.csdn.net/agurt80004/article/details/101136775)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值