[护网杯 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的值是动态的,后面还要补充模版知识