SSTI模板注入

知识点

1、SSTI定义(转载)

SSTI就是服务器端模板注入(Server-Side Template Injection),也给出了一个注入的概念。

常见的注入有:SQL 注入,XSS 注入,XPATH 注入,XML 注入,代码注入,命令注入等等。sql注入已经出世很多年了,对于sql注入的概念和原理很多人应该是相当清楚了,SSTI也是注入类的漏洞,其成因其实是可以类比于sql注入的。

sql注入是从用户获得一个输入,然后又后端脚本语言进行数据库查询,所以可以利用输入来拼接我们想要的sql语句,当然现在的sql注入防范做得已经很好了,然而随之而来的是更多的漏洞。

SSTI也是获取了一个输入,然后再后端的渲染处理上进行了语句的拼接,然后执行。当然还是和sql注入有所不同的,SSTI利用的是现在的网站模板引擎(下面会提到),主要针对python、php、java的一些网站处理框架,比如Python的jinja2 mako tornado django,php的smarty twig,java的jade velocity。当这些框架对运用渲染函数生成html的时候会出现SSTI的问题。

2、模块引擎

让我们看一下百度的解释:

 

再看一下大佬的解释:

也就是说,利用模板引擎来生成前端的html代码,模板引擎会提供一套生成html代码的程序,然后只需要获取用户的数据,然后放到渲染函数里,然后生成模板+用户数据的前端html页面,然后反馈给浏览器,呈现在用户面前。

模板引擎也会提供沙箱机制来进行漏洞防范,但是可以用沙箱逃逸技术来进行绕过。

详细可参考大佬的笔记:模板引擎的整理归纳 - 知乎 (zhihu.com)

3、SSTI类型 

 这是从网上找到的SSTI小思维导图,那么如何判断是什么类型的SSTI漏洞了?

当然是通过输入特定值回显来判断

For example:

如图,通过输入{{7*'7'}}来判断是Jinja2还是Twig,如若返回值是49    那就是Twig,返回值是7777777   (7个7)那就是Jinja2类型

4、SSTI基本函数

基本函数网上都有我就不一一列举了若有需要可以参考:SSTI完全学习_大千SS的博客-CSDN博客

例题:BUUCTF [BJDCTF2020]Cookie is so stable 1

打开链接发现只有一个欢迎界面,我们查看源码发现有一个flag.php尝试打开

 得到:

 看见这个界面再结合题目提示(cookie及源码中的hint)我们先进行bp抓包

这里就涉及到了上面所普及的知识点----SSTI模板注入

我们先由上面的知识来判断它的类型

这里的user是本题的注入点,开始作者以为username是注入点,之后随便输入一个值提交之后在网页中F12查看cookie才发现user才是本题的注入点

得到注入点后开始解题,在cookie的一长串代码之后加;后加上user={{7*'7'}}

若回显49则表示是Twig模块

回显7777777即7个7则是Jinja2模块

  发现回显49,表明为Twig模块

这里普及一个小知识Twig模块是固定的pyload注入:

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}//查看id
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}//查看flag

先用上面查看id的代码尝试一下发现没有flag的信息

接着用语句再查询一下flag

 即得到flag 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值