buuctf 20-[护网杯 2018]easy_tornado
这是一道毫无头绪的题目,就当作学习了。
进入之后有三个页面内容分别为:
flag in /fllllllllllllag
render
md5(cookie_secret+md5(filename))
发现请求过程很奇怪
通过filename请求一个文件然后filehash请求一个哈西值 也就是加密了一下
如果不请求哈希值试一下 直接报错,并且注意:/error?msg=Error
直接来看大佬的wp
render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页 ,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}
进行传递变量和执行简单的表达式。
Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快
在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settings
,handler
指向RequestHandler
,而RequestHandler.settings
又指向self.application.settings
,所以handler.settings就指向RequestHandler.application.settings
了,这里面就是我们的一些环境变量.
然后通过环境变量去获取cookie_secret
构造payload :/error?msg={{handler.settings}}
得到:{'autoreload': True, 'compiled_template_cache': False, 'cookie_secret': '76a26309-3853-4c68-b91e-eee75246e722'}
发现了cookie_secret
之后将/fllllllllllllag
加密一下将cookie_secret
加上 再进行一次md5加密就可以获得flag了
构造payload:?filename=/fllllllllllllag&filehash=99d14d071426405f00eca73ec4a5eb64
成功!