SSTI模板注入漏洞

摘抄的一些笔记

SSTi模板注入漏洞
1.SSTI含义
SSTI是一种注入类的漏洞,其成因也可以类比SQL注入。
SQL注入是从用户获得一个输入,然后用后端脚本语言进行数据库查询,利用输入来拼接我们想要的SQL语句。SSTI也是获取一个输入,然后在后端的渲染处理上进行语句的拼接执行。
2.模板引擎含义

模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎会生成一个标准的HTML文档。

模板引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码的分离,这就大大提升了开发效率,良好的设计也使得代码重用变得更加容易。
也就是说,模板引擎会提供一套生成HTML代码的程序,然后只需要将获取到用户数据放到渲染函数里,就会生成前端HTML页面,反馈给浏览器,呈现在用户面前。
不正确的使用flask中的render_template_string方法会引发SSTI。

SSTI 就是服务器端模板注入(Server-Side Template Injection)

​ 当前使用的一些框架,比如python的flask,php的tp,java的spring等一般都采用成熟的的MVC的模式,用户的输入先进入Controller控制器,然后根据请求类型和请求的指令发送给对应Model业务模型进行业务逻辑判断,数据库存取,最后把结果返回给View视图层,经过模板渲染展示给用户。

​ 漏洞成因就是服务端接收了用户的恶意输入以后,未经任何处理就将其作为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执行、GetShell 等问题。其影响范围主要取决于模版引擎的复杂性。

​ 凡是使用模板的地方都可能会出现 SSTI 的问题,SSTI 不属于任何一种语言,沙盒绕过也不是,沙盒绕过只是由于模板引擎发现了很大的安全漏洞,然后模板引擎设计出来的一种防护机制,不允许使用没有定义或者声明的模块,这适用于所有的模板引擎。

1.[极客大挑战 2019]Secret File

 

 

 

 

 

 

 

 

 

 

 抓包

 

 

 

 

 

 

 访问secr3t.php页面,发现提示:flag.php

 

 

 

 在URL一栏输入?file=php://filter/read=convert.base64-encode/resource=flag.php出现base64密文,解码后得到flag:flag{8c434bcf-3e11-4591-bec4-08aab70ba91a}

 

2.[极客大挑战 2019]LoveSQL

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

payload : 1' union select 1,2,group_concat(password) from l0ve1ysq1#

回显得到flag:

flag : flag{fef9e5c9-156c-4c65-aeb1-77741eeb16e3}

 

 

3.[极客大挑战 2019]BabySQL

先用万能密码:' or 1=1#   or被过滤,所以把or换成||,再注入试试。

 

 

 存在注入,然后再查库查表再查数据。

 

 

  用oorrder bbyy 4 #绕过后,我们看回显的值,说明只存在3列

 

 

 双写绕过

 

 

  现在来查询库名,用database()

 

 

  然后再查询表名。经过检测,我们发现information、from、where都被过滤,都用双写绕过一下就行了

 

 

 忽略了可能还有被注释的情况,其中password中的or被注释,所以双写绕过

 

 

 

flag{6792a57c-8613-4e66-aae5-f8f06f869f6b}

posted @ 2022-08-01 17:13  clyhys  阅读(404)  评论(0)    收藏  举报