SSTI

服务器端模板注入(Server-Side Template Injection)
ql注入是从用户获得一个输入,然后又后端脚本语言进行数据库查询,所以可以利用输入来拼接我们想要的sql语句,当然现在的sql注入防范做得已经很好了,然而随之而来的是更多的漏洞。
SSTI也是获取了一个输入,然后再后端的渲染处理上进行了语句的拼接,然后执行。当然还是和sql注入有所不同的,SSTI利用的是现在的网站模板引擎,主要针对python、php、java的一些网站处理框架,比如Python的jinja2 mako tornado django,php的smarty twig,java的jade velocity。当这些框架对运用渲染函数生成html的时候会出现SSTI的问题。

模板引擎

百度百科的定义:
模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。
模板引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码的分离,这就大大提升了开发效率,良好的设计也使得代码重用变得更加容易。
利用模板引擎来生成前端的html代码,模板引擎会提供一套生成html代码的程序,然后只需要获取用户的数据,然后放到渲染函数里,然后生成模板+用户数据的前端html页面,然后反馈给浏览器,呈现在用户面前。

回到题目

题目是easy_tornado,/welcome.txt页面也看到render,可能会是SSTI模板注入
从url可以看出使用的是post传参,需要一个filename值及文件的filehash值
image.png
在/hints.txt里面我们能看到filehash的计算公式
image.png
看得出我们还缺少的就是cookie_secret
提交filename为/flag.txt中写的flag位置/fllllllllllllag会报错,因为filehash不正确,报错后的url如下
image.png
可在msg处进行注入
tornado中的handler.settings对象
handler 指向RequestHandler
而RequestHandler.settings又指向self.application.settings
所有handler.settings就指向RequestHandler.application.settings
提交url
image.png
得到
image.png
拿到了cookie_secret之后我们只需要按照公式计算出filehash的值,提交两者就可以得到flag了