题目链接:https://buuoj.cn/challenges#[护网杯 2018]easy_tornado
打开环境后如下所示。
依次访问。
这里需要留意一下 url,在访问 flag.txt 时,发现 url 为:/file?filename=/flag.txt&filehash=f37c974391ee4a7bc4a23cc8987e0eed。
尝试将 filehash 参数更改掉,发现被重定向到:/error?msg=Error。
关注到 welcome.txt 的内容:render,并且题目名为:tornado,可以知道,本题的考点是模板注入。
模板引擎(这里特指用于 Web 开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,利用模板引擎来生成前端的 HTML 代码。模板引擎会提供一套生成 HTML 代码的程序,然后只需要获取用户的数据,然后放到渲染函数里,然后生成模板 + 用户数据的前端 HTML 页面,然后反馈给浏览器,呈现在用户面前。模板引擎也会提供沙箱机制来进行漏洞防范,但是可以用沙箱逃逸技术来进行绕过。
SSTI 就是服务器端模板注入(Server-Side Template Injection)。当前使用的一些框架,比如 Python 的 Flask,PHP 的 ThinkPHP,Java 的 Spring 等一般都采用成熟的的 MVC 的模式,用户的输入先进入 Controller 控制器,然后根据请求类型和请求的指令发送给对应 Model 业务模型进行业务逻辑判断,数据库存取,最后把结果返回给 View 视图层,经过模板渲染展示给用户。漏洞成因是服务端接收了用户的恶意输入以后,未经任何处理就将其作为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执行、GETSHELL 等问题。其影响范围主要取决于模版引擎的复杂性。凡是使用模板的地方都可能会出现 SSTI 的问题,SSTI 不属于任何一种语言,沙盒绕过也不是,沙盒绕过只是由于模板引擎发现了很大的安全漏洞,然后模板引擎设计出来的一种防护机制,不允许使用没有定义或者声明的模块,这适用于所有的模板引擎。
因此,参考:Tornado模板注入。在 msg 处插入注入代码,Payload:error?msg={{handler.settings}}
,成功输出了 cookie_secret。
依照 hints.txt 的提示进行计算,计算出 filehash 为:70bc8d34f07c4b64e65b21a92cd10c85。
访问:/file?filename=/fllllllllllllag&filehash=70bc8d34f07c4b64e65b21a92cd10c85,即可获得 flag。
标签:txt,filehash,tornado,用户,引擎,2018,护网杯,模板 From: https://www.cnblogs.com/imtaieee/p/18522723