[护网杯 2018]easy_tornado

flag在/fllllllllag里面,就是filename=/fllllllllag(对,一定要保留前面的斜杠)
hints,提示里面是

welcome里面则是发现了render,提示模板注入
需要凭借cookie_secret+md5(filename)并转化为MD5值
render是python的一个渲染函数,他们的url都是由filename和filehash组成,filehash即为他们filename的md5值。
但是我们不知道cookie_secret是什么

我们在这个文档里面可以知道cookie_secret并不像我们的cookie一样可以自己修改的,而是包含了时间戳,HMAC签名和编码后的cookie值,所以我们自己修改cookie并不现实。
想到render难道没有用处么,找一下render作用
render意为渲染;self.render(“entry.html”, entry=entry)该语句意思就是找到entry.html这个模板,用右边这个entry来实例化entry.html模板中的entry参数,从而显示在页面上。
回过头发现flag.txt那个Error的页面有一个参数msg也是等于Error
发现msg这个函数可以左右页面的输出,想到之前有些题目利用一个参数可以出来phpinfo()等,因此现在目标就是怎么利用msg这个参数来找到cookie_secret了
在文档中我们可以看到相关render渲染的作用
我们可以利用双大括号来把表达式传进去以获取我们想要的信息,这样我们猜想
msg={{cookie的位置}} |
来获得我们想要的
因为没有相关框架的基础,不知道cookie的位置,看了一些大佬的wp,再加上查文档验证

cookie_secret在Application对象settings的属性中 ,访问它的话就需要知道它的属性名字
根据wp和文档可知:self.application.settings有一个别名是RequestHandler.settings
其中handler又是指向处理当前这个页面的RequestHandler对象
RequestHandler.settings指向self.application.settings
因此handler.settings指向RequestHandler.application.settings
所以就是说handler.settings可以用作它的属性名字进行访问
所以根据以上的新知识,大胆猜测一下payload
?msg=

找到了cookie_secret
再根据
md5(cookie_secret+md5(filename))
找到filehash就可以了(保留/fllllllllag的斜杠,是文件名里的东西!!!)