进入页面后,发现有三个可点击的链接:
点进去看看,分析flag是在fllllllllllllag中的,render是一个渲染函数(可以猜测这里存在模板注入),md5(cookie_secret+md5(filename))的值应该是我们最终需要得到的,并且发现点击每一个链接后,url里都有filehash参数,也就是说我们需要拿到cookie_secret的值,来计算出fllllllllllllag的filehash值:
/flag.txt: flag in /fllllllllllllag /welcome.txt: render /hints.txt: md5(cookie_secret+md5(filename))
看能不能打开fllllllllllllag文件,发现显示Error,并且url中有一个参数msg可利用,前面说了有可能存在模板注入,那不妨试试:
发现的确存在模板注入
题目描述是Tornado 框架,去Tornado官方文档查阅资料:
RequestHandler.cookie的别名:self.request.cookies
RequestHandler.settings的别名:self.application.settings
handler是RequestHandler调用的子类
传递给构造函数的其他关键字参数保存在设置字典中,在文档中通常称为“应用程序设置”。设置用于定制Tornado的各个方面(尽管在某些情况下,通过重写RequestHandler子类中的方法可以实现更丰富的定制)。一些应用程序还喜欢使用设置字典,使特定于应用程序的设置可供处理程序使用,而无需使用全局变量。Tornado中使用的设置如下所述。
通过以上资料,可以知道:
- cookie_secret在settings中
- RequestHandler.cookie的别名:self.request.cookies
- RequestHandler.settings的别名:self.application.settings
- handler是RequestHandler调用的子类
handler是RequestHandler调用的子类,RequestHandler封装对请求处理的所有信息和方法,那么handler就是指向RequestHandler的,那么RequestHandler.settings等价于handler.settinigs:
构造paylod:
http://111.200.241.244:50353/error?msg={{handler.settings}}
拿到cookie_secret的值:
接下来就是计算md5(cookie_secret+md5(filename)):
拿到flag:
总结:
Tornado框架



