学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
几个例子
绕过过滤
我们可以利用过滤器构造任意的字符
首先利用属性弄出字符来(没有可以用别的)
结合一些普通 *** ,截取字符,例如单引号:
黑客帮忙找手机定位相关问题 黑客价格划分相关问题 怎么知道你的手机是否被黑客控制过 2011黑客ko是谁(adamts13是什么)...
1在微信主接口中切换至”设置“选项卡,然后在打开的接口中找到并点击“通用”选项菜单。此时就会进行“通用+Q”设置必要,那还是+邱400合12连。 只需要下一个数据恢复工具到电脑上就可以开始恢复了:首先...
免费微信聊天记录监控 无死角监视别人手机微信活动-免费接单黑客 微博的「已读」功能下线了。 我想起奇葩说以前有一期讨论“时保联是不是暴政”,陈咏开说:其实真正的暴政是「已读不回」。时保联至少...
我国网络病毒应急处理管理中心根据对互联网技术的检测发觉,最近一种感柒安卓机的病原体a.expense.GhostPush.a出現,众多安卓机客户应当心严防。 该病毒是一款消息推送运用类病毒,开机自启...
最近被炒上热门,具有话题度的影戏不少 挑选了几部对照有影响力,剧情还不错的 影戏荒的同伙周末可以下载看看,消磨下时间 —– 《希特勒回来了》 磁力链接: magnet:?xt=ur...
不可以! 这样简单粗暴的回答,肯定是没有说服力的。 作为认真反诈的黑白呸,一定要给大家说出个123来 如果你想搞清楚为什么,请划动你可爱的小手继续看下去 追回被骗的钱,是每一个受害...