[护网杯 2018]easy_tornado

image-20240505000241435

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

hints,提示里面是

image-20240505000328658

welcome里面则是发现了render,提示模板注入

需要凭借cookie_secret+md5(filename)并转化为MD5值

render是python的一个渲染函数,他们的url都是由filename和filehash组成,filehash即为他们filename的md5值。

但是我们不知道cookie_secret是什么

img

我们在这个文档里面可以知道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渲染的作用

image-20240505015540679我们可以利用双大括号来把表达式传进去以获取我们想要的信息,这样我们猜想

msg={{cookie的位置}}

来获得我们想要的

因为没有相关框架的基础,不知道cookie的位置,看了一些大佬的wp,再加上查文档验证

img

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=

image-20240505015550463

找到了cookie_secret

再根据

md5(cookie_secret+md5(filename))

找到filehash就可以了(保留/fllllllllag的斜杠,是文件名里的东西!!!)