关于SSTI的坑

Posted bighu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于SSTI的坑相关的知识,希望对你有一定的参考价值。

SSTI注入

进过几天的CSDN和博客园以及个人博客的查询,我大概讲一下我对SSTI模板注入的理解。

SSTI注入指的是模板注入(应该翻译就是模板注入)

就站在我所了解的知识水平(大概就是大一随便水了一下的c/c++)上简单分析一下

模板大概就相当于c++中的模板类(可以使用模板类来到达多种类,当然还有模板函数),大概就是用模板可以省很多工作量。(虽然这是一个新东西,但我想用一些我了解的东西大概解释一下,以免我就只记下它的一堆概念)

而模板有一个特性(他会执行传给它的参数,实际上你给模板2*3与给它6是一个道理,它会先计算2*3)

 

怎么看它有没有模板注入


如果来浏览器的网址栏看到明显的一个变量=某个东西(s),而这个东西又被输出到网页上可以试着改一下这个s,看输出变没变。例如

 

 

很明显它就把我输的东西给渲染出来了(这就说明存在SSTI)

 

 

模板注入在源码上的体现


$output = $twig->render("Hello {{name}}", array("name" => $_GET["name"])

列入上面这句话(这个是不会引起模板注入的)原因是输入是先在后面赋值给name然后在将name带入到前面来。

我想到一个有意思的例子:

将用户的输入比作一个炸弹,那么上面的("name" => $_GET["name"])就是将这个炸弹进行3D打印然后将打印出来的假炸弹传给模板(这样是没问题的)。

 

 

在考虑这个:

$output = $twig->render("Hello {$_GET[\'name\']}");

显然这个就是直接将炸弹给模板了,被炸也就很正常了。·

注:这个例子中用户的模板方法是twig(一个开源的项目)

 

 

如何进行模板注入


这里我还没屡清楚,推一下我看的几篇博客吧。

https://www.cnblogs.com/bmjoker/p/13508538.html

https://blog.knownsec.com/2015/11/server-side-template-injection-attack-analysis/

 

 

 

最后,这个坑太大了,以我现在的知识储备属实填不过来(以后慢慢填

以上是关于关于SSTI的坑的主要内容,如果未能解决你的问题,请参考以下文章

SSTI之细说jinja2的常用构造及利用思路

SSTI简单总结和例题

SSTI之细说jinja2的常用构造及利用思路

浅谈flask ssti 绕过原理

Python安全 | Flask-jinja2 SSTI 利用手册

关于npm的坑