SSTI简介

SSTI简介本文详细介绍了服务器端模板注入 SSTI 的概念 触发原因 特别关注了 Jinja2 等模板引擎的使用问题

大家好,欢迎来到IT知识分享网。

1、什么是SSTI

SSTI就是服务器端模板注入(Server-Side Template Injection),实际上也是一种注入漏洞。

2、引发SSTI原因

render_template渲染函数的问题

渲染函数在渲染的时候,往往对用户输入的变量不做渲染。

{
{}}在Jinja2中作为变量包裹标识符,Jinja2在渲染的时候会把{
{}}包裹的内容当做变量解析替换。比如{
{2*2}}会被解析成4。如此一来就可以实现如同sql注入一样的注入漏洞。

值得一提的是还有个类是__mro__,它会显示类和基类,这是它和__bases__的不同。

找一个可利用的function来执行,比如popen的话,就可以这样利用:”.__class__.__bases__[0].__subclasses__()[138].__init__.__globals__[‘popen’](‘dir’).read()

int():将值转换为int类型;

float():将值转换为float类型;

lower():将字符串转换为小写;

upper():将字符串转换为大写;

title():把值中的每个单词的首字母都转成大写;

capitalize():把变量值的首字母转成大写,其余字母转小写;

trim():截取字符串前面和后面的空白字符;

wordcount():计算一个长字符串中单词的个数;

reverse():字符串反转;

replace(value,old,new): 替换将old替换为new的字符串;

truncate(value,length=255,killwords=False):截取length长度的字符串;

striptags():删除字符串中所有的HTML标签,如果出现多个空格,将替换成一个空格;

escape()或e:转义字符,会将<、>等符号转义成HTML中的符号。显例:content|escape或content|e。

safe(): 禁用HTML转义,如果开启了全局转义,那么safe过滤器会将变量关掉转义。示例: {
{‘<em>hello</em>’|safe}};

list():将变量列成列表;

string():将变量转换成字符串;

join():将一个序列中的参数值拼接成字符串。示例看上面payload;

abs():返回一个数值的绝对值;

first():返回一个序列的第一个元素;

last():返回一个序列的最后一个元素;

format(value,arags,*kwargs):格式化字符串。比如:{
{ “%s” – “%s”|format(‘Hello?’,”Foo!”) }}将输出:Helloo? – Foo!

length():返回一个序列或者字典的长度;

sum():返回列表内数值的和;

sort():返回排序后的列表;

default(value,default_value,boolean=false):如果当前变量没有值,则会使用参数中的值来代替。示例:name|default(‘xiaotuo’)—-如果name不存在,则会使用xiaotuo来替代。boolean=False默认是在只有这个变量为undefined的时候才会使用default中的值,如果想使用python的形式判断是否为false,则可以传递boolean=true。也可以使用or来替换。

length()返回字符串的长度,别名是count

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120180.html

(0)
上一篇 2025-10-31 14:10
下一篇 2025-10-31 14:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信