学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
几个例子
绕过过滤
我们可以利用过滤器构造任意的字符
首先利用属性弄出字符来(没有可以用别的)
结合一些普通 *** ,截取字符,例如单引号:
农历为什么会有闰月?——农历置闰月是为了协调回归年与农历年的矛盾。回归年与农历年有什么矛盾呢?先记住:回归年的总长度为365.2422日,朔望月的长度为29.5306日。十二个朔望月构成农历年,长度为...
原标题:更换新手机之后,怎么迁移微信聊天记录呢?3分钟教会你 更换新手机之后,怎么迁移微信聊天记录呢?如今智能手机更新换代非常快,我们基本手机用不到2年,就会换一款新手机。更换手机后,除了需...
如何找雇用一个优秀的产物司理?Google产物主管Ken Norton的提出了本身从业以来的六条心得。 我在创业公司认真雇用有一段时间了,创业公司和大公司的雇用有很大区别。在雅虎搜索,我们好像一直在...
能发下黑客帝国3:矩阵革命.720p.国英双语.BD中英双字的种子或下载链接么... 1、影片已上映的有三部,为《黑客帝国》、《黑客帝国2:重装上阵》、《黑客帝国3:矩阵革命》,分别于1999年3月3...
支付宝官方宣布:网络赌博零容忍!一经核实,将被列入黑名单! 如今支付宝已然是能够满足很多人多场景的使用需求了,线上宅家就能交水电费,线下掏付款码就能支付,很多功能在给大家带来便利的同时也让不少不法分...
悦诗风吟红石榴系列合适年纪 悦诗风吟红石榴系列合适25 ~三十岁的年纪。二十五岁时,女孩儿的肌肤抗氧化性作用刚开始恶变,肌肤会看起来黯淡无光;二十五岁之后 ,伴随着年纪的提高,肌肤基础代谢减缓,胶原...