攻防世界Web_easytornado
题目:
解题思路:
题目就三个txt文本文件 , 由python_template_injection这篇随笔中了解到 tornado也是python web应用程序模板的一种,应该也是考查模板注入。
打开这三个文本查看一下,结果如下:
flag在 /fllllllllllllag里面,render({options}) 向模板中渲染数据, 可以把视图响应给客户端,猜测存在模板注入。
filename文件名猜测是/fllllllllllllag,将/fllllllllllllag的md5与cookie_secret相加再取md5值。所以只需要知道cookie_secret。
观察查看文件时如下:
发现存在filehash的参数,猜测filehash=md5(cookie_secret+md5(filename))
解题过程:
直接url后加入/fllllllllllllag查看一下发下报错。
发现msg=Error,试试这里的值是否是注入点,发现存在模板注入漏洞。
现在需要知道什么是cookie_secret,参考资料[https://www.jianshu.com/p/b045b195ee76]
在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settings,handler 指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,这里面就是我们的一些环境变量.
了解了什么是cookie_secret后我们可以通过模板注入构造payload:mag={{handler.settings}}
发现cookie_secret=ac962e3f-841f-4421-9750-30afd0c43782
编写代码计算filehash.
# encoding: utf-8 import hashlib filename="/fllllllllllllag" cookie_secret ="ac962e3f-841f-4421-9750-30afd0c43782" def getvalue(string): md5 = hashlib.md5() md5.update(string.encode('utf-8')) return md5.hexdigest() def merge(): print(getvalue(cookie_secret + getvalue(filename))) merge()
计算结果:cf215a0a40126053bb917dd170a91a33
最后,构造payload: http://111.200.241.244:62075/file?filename=/fllllllllllllag&filehash=cf215a0a40126053bb917dd170a91a33
=====================================================================
总结:
在tornado模板中,存在一些可以访问的快速对象,如handler.settings,利用render渲染函数漏洞执行可获取cookie_secret的hash值。
posted on 2022-02-24 22:35 shacker_shen 阅读(148) 评论(0) 编辑 收藏 举报