学ssti就像是对python原理的一层深入探索,入口很简单,就是用户输入未经过滤便被服务器模板渲染,将其当作变量解析替换,从而达到读取文件或者执行命令等目的
漏洞代码:
以上代码存在ssti漏洞点在于render_template_string函数在渲染模板的时候使用了%s来动态的替换字符串,我们知道Flask 中使用了Jinja2 作为模板渲染引擎,{{}}在Jinja2中作为变量包裹标识符,Jinja2在渲染的时候会把{{}}包裹的内容当做变量解析替换。
服务器将{{}}的内容直接执行后返回了结果
直接返回出配置变量值,存在敏感信息
ctf题目中大多数是需要读取flag或者读取其他源码的
接下来利用一些骚操作读取文件吧
python中,不用引入直接使用的内置函数称为 builtin 函数,例如我们通常用的open,chr,ord等等
利用关键字寻找与读文件有关的类
Python2
这不是我们很熟悉的file吗,直接用就好了
或者让我们更加深入一点
python2没有ipython,输出比较混乱我们用python3的相同类替代分析下
Python3
同上,可以找出不少读取文件的类,只是这里file变成了open函数
随便找一个
利用函数导入os库执行命令
利用本身已经导入os库的类执行命令
利用执行命令
利用执行命令
Python2
先寻找含有eval函数的类
寻找含有os库的类
剩下的两个 ***
查看 *** 的位置
查看的位置
查找模块的位置
查找 *** 的位置(在这里使用可以实现一样的效果,步骤一样,不再复述)
调用 ***
利用commands 进行命令执行
Python3
先寻找含有eval函数的类
利用本身导入os库的类执行命令
寻找含有os库的类
是flask中的一个属性,为返回请求的参数,这里把当作变量名,将后面的路径传值进来,进而绕过了引号的过滤
base64编码绕过
使用实例访问属性时,调用该 ***
例如被过滤掉关键词
字符串拼接绕过
利用hex编码,base64编码,[::-1]等绕过关键词过滤
过滤花括号
使用{% if ... %}1{% endif %}
以下 *** 仅在jinja2中实验成功
声明变量
在模板中添加变量,可以使用(set)语句。
语句来创建一个内部的作用域,将语句放在其中,这样创建的变量只在代码块中才有效
变量可以用链接
内置过滤器
变量可以通过 过滤器修改。过滤器与变量用管道符号分割,并且也 可以用圆括号传递可选参数。多个过滤器可以链式调用,前一个过滤器的输出会被作为 后一个过滤器的输入。
例如会移除 name 中的所有 HTML 标签并且改写 为标题样式的大小写格式。
过滤器接受带圆括号的参数,如同函数调用。这个例子会 把一个列表用逗号连接起来:。
类似于php中的过滤器,过滤器种类太多,具体项目我复制到另一个文档里了
https://jinja.palletsprojects.com/en/master/templates/#builtin-filters
几个例子
绕过过滤
我们可以利用过滤器构造任意的字符
首先利用属性弄出字符来(没有可以用别的)
结合一些普通 *** ,截取字符,例如单引号:
1.1 组件称号随机化第一种技能是一个陈旧的被称为“跨协议脚本”的技能,2001年宣布的论文详细描述了此进犯,但要害的是无论是Redis仍是Memcached都有一个简略的根据行的协议,而且疏忽任何无...
现在已经进入九月的尾声,马上就要迎来期待已久的十一小长假了,很多盆友在这个小长假里面可能会出去旅游,或者是回家陪伴家人,不管怎么样,都是非常值得开心和期待的一件事情。很多盆友平时很喜欢在朋友圈分享自己...
在大家应用笔记本电脑的情况下,会下许多手机软件,例如办公室软件、交友软件、视频app、手机游戏等。但手机软件全是有一些数据信息的,手机软件一多,那数据信息当然便会变多。那数据信息里惨杂的一些杂七杂八的...
与局域网用比,普通拨号上网的用户在预防黑客的对抗中,往往处于更不利的地位。但是,许多上网的一向对网络安全抱着无所谓的态度,认为最多不过是被人盗用账号而损失几千元而已,却没有想到被盗用的账号如果被黑...
我国基础教育历史性解决“有学上”问题 本报讯(记者 任敏)昨天,教育部召开新闻发布会,介绍“十三五”以来基础教育改革发展成就。教育部基础教育司司长吕玉刚介绍,目前,全国共有中小学(幼儿园)5...
15000m²超大空间 低碳办公公约 共享前台 楼层管家 手机端APP资源智能配置 第三方企业管理咨询服务接入 智能化办公全应用…… 看到这些酷炫的名词,你会...