SSTI原理+ctfshow-web361

(免责声明:本篇为学习思路与原理讲解,部分截图为“重庆橙子科技”视频课,如有侵权,联系删除)

flask漏洞

flask代码不严谨

造成SSTI:可能造成任意文件读取和RCE远程控制后台系统

漏洞成因:渲染模板时,没有严格控制对用户的输入。

使用危险的模板,导致用户可以和flask程序进行交互

举个例子:来客人了,请他们吃西瓜没有问题;但如果来的是黑人,请他们吃西瓜就有点侮辱人了,虽然我的本意并不是侮辱他们。即把原本没有意义的代码/命令输入上去,flask解析后就变成了漏洞

1.判断ssti漏洞类型

绿色线代表执行了,红色线代表未执行

常见ssti漏洞类型:

1、php 常用的

--Smarty

Smarty算是一种很老的PHP模板引擎了,非常的经典,使用的比较广泛

--Twig

Twig是来自于Symfony的模板引擎,它非常易于安装和使用。它的操作有点像Mustache和liquid。

--Blade

Blade 是 Laravel 提供的一个既简单又强大的模板引擎。

2、Java 常用的

--JSP

这个引擎我想应该没人不知道吧,这个应该也是我最初学习的一个模板引擎,非常的经典

--FreeMarker

FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

--Velocity

Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力。

3、Python 常用的

--Jinja2

flask jinja2 一直是一起说的,使用非常的广泛,是我学习的第一个模板引擎

--django

django 应该使用的是专属于自己的一个模板引擎,我这里姑且就叫他 django,我们都知道 django 以快速开发著称,有自己好用的ORM,他的很多东西都是耦合性非常高的,你使用别的就不能发挥出 django 的特性了

--tornado

tornado 也有属于自己的一套模板引擎,tornado 强调的是异步非阻塞高并发

2.继承关系和魔术方法

即 : 漏洞利用的逻辑 与 执行漏洞的命令

2.1继承关系:

父类和子类

儿子1不能完成的事情找爹,如果爹不能完成就找爹的py或者儿子2

魔术方法功能演示:

基础魔术方法:

常见注入模块:

这里留意一下os._wrap_close,后面会用到

3.ctfshow-web361

这道题是ctfshow-ssti题型的第一道题,没有任何过滤。

演示过程未使用任何漏洞扫描工具,初学者可放心学习原理!!!

1.先检查漏洞类型(其实没必要,为后续做铺垫,走个流程)

大概是jinja2或者twig 这道题无所谓

2.检查漏洞

这里的思路是为了找到object,进而引出他的所有子类

引出子类后,将其全部粘贴至文本文件(推荐notepad++),然后将所有的 逗号 替换为 换行符

替换完成后,我们查询一下高危类,找到os._wrap_close

然后我们引用一下

并看看它有没有被重载,如果使用__init__方法后没有回显“wapper”,则可以使用

然后我们用__globals__方法,查看一下当前类的全部全局变量:

这里我们可以找到popen、eval、system等危险函数

然后输入相应命令即可得到flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值