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:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值