护网杯2018的一道tornado模板注入题目
1 | /flag.txt |
给出了以上信息,并且url格式是file?filename=/hints.txt&filehash=1665701fc163e54b3bdc373b5e48446d这样的,直接修改filename为flag的话,得到错误信息:
1 | /error?msg=Error |
并且页面显示Error,直接修改msg页面显示内容也会改变,根据render提示应该是模板注入,但存在过滤,ORZ

在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settings,handler 指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,这里面就是我们的一些环境变量

得到secret后,就是计算访问flag文件的hash,获取flag
1 | import hashlib |