首页 > 技术文章 > buu-[护网杯 2018]easy_tornado

c0d1 2021-06-09 20:38 原文

打开题目,发现给了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'
filename = filename.encode()
a = md5encode((cookie_secret + md5encode(filename)).encode())
print(a)

得到filehash为

 

代入即可

 

 

推荐阅读