打开题目,发现给了3个文件的链接
一一点开看看
分别告诉了flag在那个文件夹里和一个render(渲染)提示和一个计算公式
通过观察可以发现url里有一个filehash参数,猜测就是通过这个公式计算出来的
因为不知道cookie,要先找到cookie
先访问/fllllllllllllag试试
发现报错了
观察到url里有个msg的参数的值为Error
随便改一下试试
突然想到题目给的信息
猜测是python模板注入
但是发现使用正常使用的模板注入都是返回orz
联想到第二个提示
一起查了下
tornado render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传递变量和执行简单的表达式。
render是一个类似模板的东西,可以使用不同的参数来访问网页
在tornado模板中,存在一些可以访问的快速对象
而handler.settings对象就是其中一个
handler对象的handler 指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所有handler.settings就指向RequestHandler.application.settings,大概就是说,这里面就是我们一些环境变量了
构造payload:msg={{handler.settings}}
就得到了cookie_secret
接下来就可以来通过计算公式来计算f当filename=/fllllllllllllag时filehash的值
脚本如下
import hashlib def md5encode(str): m = hashlib.md5() m.update(str) return m.hexdigest() filename = ‘/fllllllllllllag‘ cookie_secret = ‘91654012-dbb2-458c-ac33-41db2723fbe5‘ name = name.encode() a = md5encode((cookie_secret + md5encode(filename)).encode()) print(a)
得到filehash为
代入即可
原文:https://www.cnblogs.com/c0d1/p/14868571.html