[护网杯 2018]easy_tornado1
进入环境后有三个路径链接
访问/flag提示会说flag在/fllllllllllag里
值得注意的是访问后网页url发生的变化,这里居然有两个参数
替换掉filename的值后页面url再次发生变化,网页只有一个msg传参的数据
访问welcome.txt,只是回显了一个render,百度了一下,出来了几段模版注入的文章,就想到了之前学习flask模版注入里的,render_template渲染函数
最后查看了一下wp,果然是模版注入。不过不是Python flask,而是Tornado,是另外一种Python模版,没学
最后访问一下hints.txt,出现了一个MD5算法,filename我们知道,只不过这个cookie_secret,需要了解一下
那说明URLfilehash参数就是上面算法MD5加密后的字符串,那我们只要得到cookie_secret,就可以经过算法得到flag
cookie_secret简介
普通的cookie并不安全,可以通过客户端修改
在Tornado框架中,cookie_secret是一个密钥,一般使用随机生成的字符串,被用于对生成的cookie进行加密。它的作用是确保cookie的安全性,防止被修改或伪造。
具体来说,当Tornado应用程序使用set_secure_cookie()函数设置cookie时,会使用cookie_secret对cookie进行加密。而在获取cookie时,Tornado则会使用同样的密钥进行解密,并验证cookie是否被篡改。如果cookie_secret不匹配,Tornado将不会对其进行解密,并抛出异常,以防止未经授权的访问。
handler.settings
以下是gpt的答案,因为还没有学过这个模版相关的知识,所以直接复制来的
`handler.settings`在Tornado框架中是一个字典,用于存储应用程序的各种配置选项。其中包括一些默认的配置选项,也可以自定义添加其他配置选项。
在Tornado框架中,`cookie_secret`是`handler.settings`字典中用于配置cookie密钥的一个选项。Cookie密钥是用于加密和验证cookie的字符串,它应该是一个随机且足够长的字符串,用于保证cookie的安全性和完整性。
解题步骤
说明我们可以利用handler.settings,去访问一些配置,就能得到cookie_sercret的键值对,这样我们就可以通过hints文件提供的算法,求得filehash的值
需要注意的是一定要按照顺序进行字符串拼接,否则出来的MD5值会有所差别
import hashlib
filename = '/fllllllllllllag'
cookie_secret = '139f115c-818e-4821-9f5a-c88ae4f19a06'
filename = hashlib.md5(filename.encode()).hexdigest()
a = cookie_secret + filename
filehash = hashlib.md5(a.encode()).hexdigest()
print(filehash)
至此也就做出来了,这个cookie_sercret的值是动态的,后面还要补充模版知识