BUUCTF-[护网杯 2018]easy_tornado 1

时隔多天,刷了一些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}

原文地址:https://www.cnblogs.com/junlebao/p/13819357.html