欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

buuctf_模板注入_[护网杯 2018]easy_tornado 1

程序员文章站 2022-09-17 09:15:44
题目:[护网杯 2018]easy_tornado 1出处:https://buuoj.cn/challenges知识点:1.模板注入2.百度题面:解题步骤:1.看到tornade我觉得这可能是个我不知道的知识点,我决定百度一下,第一个发现是python,根据经验,基本上每次在web题里见到python,都与模板注入有关。2.分别打开三个文件,内容如下:/hints.txtmd5(cookie_secret+md5(filename))/welcome.txtrender/...

题目:[护网杯 2018]easy_tornado 1

出处:https://buuoj.cn/challenges

知识点

1.模板注入
2.百度

题面
buuctf_模板注入_[护网杯 2018]easy_tornado 1
解题步骤
1.看到tornade我觉得这可能是个我不知道的知识点,我决定百度一下,第一个发现是python,根据经验,基本上每次在web题里见到python,都与模板注入有关。

buuctf_模板注入_[护网杯 2018]easy_tornado 1
2.分别打开三个文件,内容如下:

/hints.txt
md5(cookie_secret+md5(filename))

/welcome.txt
render

/flag.txt
flag in /fllllllllllllag

每次点开一个文件,打开文件都会以以下形式传递参数:

file?filename=/flag.txt&filehash=3925fdff8aebe222710b301081210653

3.filehash是个32位的东西,凭经验,它是个md5加密的数据,我猜这里只要filehash和filename的数据能对应上就可以读取filename文件中的内容。而hints.txt中的公式很可能就是filehash的计算方法。我们验证一下这个猜测,将file?filename=/flag.txt&filehash=3925fdff8aebe222710b301081210653中的filehash或flag.txt改成别的东西,立刻报错error,说明应该只有filehash正确,才能显示文件。
buuctf_模板注入_[护网杯 2018]easy_tornado 1

4.如此一来,我们现在只差一个cookie_secret即可得到结果。我们知道MD5加密不可逆(但是可以口算),虽然我们有了两个已知的filehash和对应的filename但是我们无法通过已知的变量算出这个cookie_secret。这说明cookie_secret需要用其他方法获取。

5.我们知道渗透测试的特点就是要碰运气,我百度了很久也读了文档,还是没有找到cookie_secret存在哪里。目前为止这道题还没有进行任何漏洞利用,我觉得不太正常,结合前面猜测的模板注入,我们不妨先验证一下,本题的漏洞是否在这里。我们知道模板注入必须通过传输型如{{xxx}}的执行命令,探测方式很简单,给一个参数赋值{{22*22}}返回484则必然存在模板注入。

6.目前已经知道的参数传递只有两个,一个是xxxx/file?filename=,一个是xxxx/error?msg=

分别测试一下:
测试xxxx/file?filename={{22*22}},报错,跳转到xxxx/error?msg=error
测试xxxx/error?msg={{22*22}},返回一个这个,这我也没见过
buuctf_模板注入_[护网杯 2018]easy_tornado 1
我再试一下{{1}},返回:
buuctf_模板注入_[护网杯 2018]easy_tornado 1
我大概知道了,长得这么人工的东西可能意思是发生了过滤。毕竟如果存在可以肆意利用的模板注入,就可以直接rce了,题也不用做了,直接读文件就行了。看来msg参数确实可以进行模板注入,是这题的突破口。

7.问题又回来了,现在我们知道了存在模板注入的存在,接下来要获取cookie_secret,各种尝试与资料获取发现对于tornado框架存在附属文件handler.settings,于是尝试输入/error?msg={{handler.settings}},返回值如下,我们取得了cookie_secret(这段直接照搬):
buuctf_模板注入_[护网杯 2018]easy_tornado 1
(好吧我在这里也卡住了,去阅读了一些wp之后,发现基本上大家的文章里都是一下子就知道了cookie_secret是怎么获取。但是恕我直言,相比模块注入,这里可能是这题比较难搞的地方,我读了半天文档还是没搞明白,读文档怎么发现handler.settings可以获取cookie_secret的,对于我这样不用python进行web开发的人来说,根本是云里雾里。我现在做题的量还是太少了,目前还不能确定到底这里考察的是对python的掌握还是阅读开发文档的能力。)

8.利用脚本,算出来最终的filehash,好吧这里我又踩了一个坑,我用php写了个脚本试了好几次,才想起来这个程序是python的,代码如下

#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 = '856bc928-2e49-4398-8135-69c4b317baba'
    print(md5(cookie_secret + md5(filename)))


if __name__ == '__main__':
    filehash()

运行之后
得到

filehash=a503491adff0b7483b471c2aaab4ea4e

以filehash和filename的正确值输入进行文件读取:

xxxxx/file?filename=/fllllllllllllag&filehash=a503491adff0b7483b471c2aaab4ea4e

得到flag:

buuctf_模板注入_[护网杯 2018]easy_tornado 1

总结

抱歉,对于我不熟悉的领域,文章无法保证质量,这篇文章虽然我修修改改很久,但还是很不满意。我做php审计题目和注入题目比较多,平时写python也就是做做爬虫,这次这题算是恶心到我了,目前我有两个疑点:

1.我不太清楚对于使用python进行web开发的程序员来说,cookie_secret到底是不是一个常识性的东西,以至于我不能确定到底这题获取cookie_secret部分考察的是对python的掌握还是阅读开发文档的能力。

2.到底“一有python的web题就是模板注入”这个逻辑是不是个常态,好像我遇到的全都是这种情况。

请知道的大佬们留言告诉我,或者也许以后我做的题目多了会自己对这篇blog进行更新,水了一天,实在惭愧。

ps

我和短短的故事不会天天更新,但我还得不时不时的提起她,短短也会不开心,也会藏起来,程序员和猫都是孤独的。

本文地址:https://blog.csdn.net/ratear/article/details/109621240