BUCCTF学习笔记-easy_tornado
时间:2020/03/14
考点:模板注入、tornado框架
打开页面发现有三个链接
/flag.txt
显示 flag in /fllllllllllllag
/welcome.txt
显示 render
/hints.txt
显示 md5(cookie_secret+md5(filename))
URL
都显示参数 filename=xxxx&filehash=xxxxxxxxxxxxxxxxxxxxx
综合上面的提示,不难猜到我们需要去访问/fllllllllllllag
文件来读取flag,但在这个网站中访问文件需要同时给出参数filehash
,这个参数应该就算使md5(cookie_secret+md5(filename))
来计算。那么现在只剩下一个变量不确定了,那就是cookie_secret
。前面还有一个提示render
,模板注入很重要的一点就算模板在渲染的时候,将输入的内容执行导致被恶意利用,这里应该是提示我们这个地方有模板注入漏洞。
尝试将
filename
修改成/fllllllllllllag
,因为filehash
不对会跳到一个报错页面。能发现这个报错页面存在模板注入漏洞。
改变一下
msg
参数,能发现可以在页面中回显。但是输入msg={{7*7}}
却发现后台应该是有过滤的,可能过滤了*
号。
在网上查了一下,tornado框架中有一个系统变量就算
cookie_secret
,只需要输入{{handler.settings}}
现在所有参数都拿到了,只要按照他给的提示算出对应的
filehash
就可以了。
import hashlib
def md5(str):
md = hashlib.md5()
md.update(str.encode(encoding='utf-8'))
result = md.hexdigest()
return result
cookie_secret = '135dd62a-5456-4d3e-86b9-805b1869b815'
filename = '/fllllllllllllag'
filehash = md5(cookie_secret+md5(filename))
print(filehash)
通过脚本计算出
filehash
后,在URL上填入对应的?filename=/fllllllllllllag&filehash=9b1d0832e2fc5f13a3a83b109ce0bf0f
就能得到对应flag。