Z1d10tのBlog

A note for myself,have fun!

buuctf 20-[护网杯 2018]easy_tornado

这是一道毫无头绪的题目,就当作学习了。

进入之后有三个页面内容分别为:

flag in /fllllllllllllag

render

md5(cookie_secret+md5(filename))

发现请求过程很奇怪

img

通过filename请求一个文件然后filehash请求一个哈西值 也就是加密了一下

img

如果不请求哈希值试一下 直接报错,并且注意:/error?msg=Error直接来看大佬的wp

render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页 ,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传递变量和执行简单的表达式。

Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快

在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settingshandler指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,这里面就是我们的一些环境变量.

然后通过环境变量去获取cookie_secret

构造payload :/error?msg={{handler.settings}}

得到:{'autoreload': True, 'compiled_template_cache': False, 'cookie_secret': '76a26309-3853-4c68-b91e-eee75246e722'}

发现了cookie_secret

之后将/fllllllllllllag加密一下将cookie_secret 加上 再进行一次md5加密就可以获得flag了

构造payload:?filename=/fllllllllllllag&filehash=99d14d071426405f00eca73ec4a5eb64

成功!

本文最后更新于 天前,文中所描述的信息可能已发生改变