【BUUCTF】---[护网杯 2018]easy_tornado---模板注入
一、思路
1、题目名字tornado
应该是python写的一个服务器框架,涉及到python多数都和模板注入有关。
2、进去题目,打开三个文件看一看
可以看到这里url中有文件名和对应的hash。
filehash是32位的,回顾hash函数,猜测是md5,并且hints里也提示了,计算公式应该是hints.txt中的公式。
如果filename和filehash一一对应,可以显示文件的内容。测试一下如果不对应会怎么显示:
3、cookie_secret
cookie_secret怎么获取呢?猜测是模板注入
二、模板注入
1、原理
参考:https://blog.csdn.net/weixin_42172261/article/details/106999825
2、测试模板注入
在上面观察到有两个参数值filename和filehash,如果不对应就返回一个错误页面,有一个参数msg,这里我们就利用msg来测试。
返回ORZ可能是迷惑信息,故意不让我们看到结果或者是过滤了。
如果换成一个数字即显示。
3、获取cookie_secret
在tornado框架中存在附属文件handler.settings,尝试获取查看这个文件。
返回值当中有cookie_secret。
三、解题
1、边写脚本计算filehash
#coding:utf-8
import hashlib
def md5(s):
md5 = hashlib.md5()
md5.update(s.encode("utf8"))
return md5.hexdigest()
def filehash():
filename = '/fllllllllllllag'
cookie_secret = '86453dc7-a1f0-4636-b0c8-bfd7ed05aa03'
print(md5(cookie_secret + md5(filename)))
if __name__ == '__main__':
filehash()
得到hash值:
1e6b8bba4b46784c816eb8eb631852d7
2、在正确的页面填写两个参数读取flag文件
payload:
file?filename=/fllllllllllllag&filehash=1e6b8bba4b46784c816eb8eb631852d7
得到flag