欢迎光临散文网 会员登陆 & 注册

BUU-Web-[护网杯 2018]easy_tornado

2021-04-30 08:55 作者:雨落雪辰  | 我要投稿

前言

每做一次新类型的题,就是一个新的知识点,将知识点弄通,就是对自己的一次提升。

开工

对3个url都进行访问


可以注意请求头

每个请求头都带有file_name和filehash

再看第三个文件hints.txt中明确写出了加密方式


这里我们就可以开始构建代码

但是我们发现输出结果于filehash中的结果不同

我这边误以为cookie_secret就是header中的Cookie,以至于加密结果错误

与此同时,我们试着直接访问/file?filename=/fllllllllllllag

得到了以下报错结果

这里试着对msg进行模版注入/error?msg={{1}}

模版注入:不正确的使用flask中的render_template_string方法会引发SSTI。

  • 在Jinja2模板引擎中,{{}}是变量包裹标识符。{{}}并不仅仅可以传递变量,还可以执行一些简单的表达式。

  • 通过{{}}变量包裹符进行简单的表达式测试来判断是否存在SSTI漏洞

  • 例如{{config}}(查看flask全局变量),{{2*2}}

这里对下划线做了过滤“_”因此无法直接通过命令获取flag

通过查阅tornado的官方文档


也就是说我们需要查找的cookie_secret是存放在对象self.application.settings["cookie_secret"]


从后续的文档中获取到self.application.settings的别名为RequestHandler.setting

官方给出了能调用的对象的别名

可以发现我们需要调用的RequestHandler的别名是handler

因此settings的位置为[handler.settings]


获取到cookie_secret后就直接将其放入上面写好的加密程序中就可以计算出flag文件的hash值

最终获取到flag

总结

本次主要就是考察了模版注入的基本知识,做法也较为简单,起初一直没搞明白handler是怎么来的,通过逐步查阅官方文档发现这个是官方定义的别名。

主要知识点

  • 模版注入(SSTI)

  • tornado中功能类的别名




BUU-Web-[护网杯 2018]easy_tornado的评论 (共 条)

分享到微博请遵守国家法律