其他分享
首页 > 其他分享> > buuctf web(五)——[护网杯 2018]easy_tornado

buuctf web(五)——[护网杯 2018]easy_tornado

作者:互联网

[护网杯 2018]easy_tornado

首先出来三个链接
在这里插入图片描述查看flag.txt
在这里插入图片描述提示flag在/fllllllllllllag中
OK,知道了第一个条件,filename=/fllllllllllllag
查看welcome.txt
在这里插入图片描述查看hints.txt
在这里插入图片描述
分析一下
在这里插入图片描述
这里有两个参数,第一个参数filename,文件的名称,我们通过查看flag.txt文件知道,藏flag的文件名为fllllllllllllag;第二个参数filehash,翻译一下:文件哈希,也就是加密了

加密方法在第三个文件中md5(cookie_secret+md5(filename)),将cookie_secret+filename的值md5加密后的值,整体再md5加密;然后把最后的值赋给filehash

现在最重要的一步就是获取cookie_secret的值,这个我不会。看一下大佬们怎么做

在试的过程中,尝试只输入filename的值而忽略filehash,结果出来以下内容,URL变成/error?msg=Error
在这里插入图片描述我们前面忽视了第二个文件内容render。我以为只是个没用的信息,结果一查,还是个挺重要的东西,怪我见得太少

render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页 ,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传递变量和执行简单的表达式。
Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。

以上是我的分析过程,下面看一下大佬的解法

由于是python的一个模板,首先想到的就是模板注入{{}},最终找到的位置是报错网页(随便访问一个文件是更改它的签名就可以进入),里面的参数msg。
render是模板注入,经过测试发现过滤了。构造payload:/error?msg={{1*2}}

在这里插入图片描述

在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settings,handler指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,这里面就是我们的一些环境变量

构造payload/error?msg={{handler.settings}}

在这里插入图片描述
找到cookie_secret为6e6e371d-7445-46db-8066-46e0e25c8b7a

filename的值md5加密后为3bf9f6cf685a6dd8defadabfb41a03a1
cookie_secret+filename加密后的值为9ff081746c35f525a315a313ac1a00d8
构造payload:/file?filename=/fllllllllllllag&filehash=9ff081746c35f525a315a313ac1a00d8

在这里插入图片描述

标签:web,buuctf,加密,settings,tornado,filename,secret,cookie,md5
来源: https://blog.csdn.net/m0_52923241/article/details/119296442