原理
模板render的handler.settings窃取cookie_secret
解题过程
进入靶场有三个超链接
查看原代码看到三个超链接地址
<a href='/file?filename=/flag.txt&filehash=85e5682df55f8ca33e9d791703ca4cb1'>/flag.txt</a><br/><a href='/file?filename=/welcome.txt&filehash=572b307bc65f04c7b2b2b7c9cfe7658b'>/welcome.txt</a><br/><a href='/file?filename=/hints.txt&filehash=ae66a9a1765a71cb778088394c52c7eb'>/hints.txt</a>
/flag.txt超链接提示我们flag的位置/fllllllllllllag
/welcome.txt提示我们render??之后才知道是模板注入
/hints.txt应该是提示我们filehash如何生成的
可以猜测这是文件包含,如果我们要查看/fllllllllllllag的内容,得需要构造出filehash,也就是找出cookie_secret
如果输入和filehash不匹配的文件名,就会出现这样的提示界面
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的值
payload:/error?msg={{handler.settings}}
拿到cookie_secret之后就构造filehash
import hashlib
filename = '/fllllllllllllag'
cookie_secret = ''
filename = hashlib.md5(filename.encode()).hexdigest()
a = cookie_secret + filename
filehash = hashlib.md5(a.encode()).hexdigest()
print(filehash)
或者用工具生成
生成filehash之后最终拿到flag
参考文章:https://blog.csdn.net/qq_49893996/article/details/131885110