thinkphp5漏洞分析之文件包含

ops/2024/9/24 10:18:39/

目录

一、环境

二、开始研究

三、漏洞分析

四、漏洞修复

五、攻击总结


一、环境

thinkphp官网下载

创建 application/index/view/index/index.html 文件,内容随意(没有这个模板文件的话,在渲染时程序会报错)

二、开始研究

创建一个图片马,并将图片马 1.jpg 放至 public 目录下(模拟上传图片操作)。接着访问 http://localhost:8000/index/index/index?cacheFile=test.php 链接,即可触发 文件包含漏洞

 复制一下文件

我们直接下断点分析

追到数组

判断name是不是一个数组

走入fatch方法

之后生成临时文件,利用vars生成临时变量,之后包含我们的test.jpg包含住,而原因就是extract这个函数

include把见到任何一个文件会将其当做php文件执行

三、漏洞分析

首先在官方发布的 5.0.19 版本更新说明中,发现其中提到该版本包含了一个安全更新。

我们可以查阅其 commit 记录,发现其改进了模板引擎,其中存在危险函数 extract ,有可能引发变量覆盖漏洞。接下来,我们直接跟进代码一探究竟。

首先,用户可控数据未经过滤,直接通过 Controller 类的 assign 方法进行模板变量赋值,并将可控数据存在 think\View 类的 data 属性中。

接着,程序开始调用 fetch 方法加载模板输出。这里如果我们没有指定模板名称,其会使用默认的文件作为模板,模板路径类似 当前模块/默认视图目录/当前控制器(小写)/当前操作(小写).html ,如果默认路径模板不存在,程序就会报错。

我们跟进到 Template 类的 fetch 方法,可以发现可控变量 $vars 赋值给 $this->data 并最终传入 File 类的 read 方法。而 read 方法中在使用了 extract 函数后,直接包含了 $cacheFile 变量。这里就是漏洞发生的关键原因(可以通过 extract 函数,直接覆盖 $cacheFile 变量,因为 extract 函数中的参数 $vars 可以由用户控制)。

四、漏洞修复

官方的修复方法是:先将 $cacheFile 变量存储在 $this->cacheFile 中,在使用 extract 函数后,最终 include 的变量是 $this->cacheFile ,这样也就避免了 include 被覆盖后的变量值。

五、攻击总结

最后,再通过一张攻击流程图来回顾整个攻击过程。


http://www.ppmy.cn/ops/96457.html

相关文章

计算机网络之IPv4深度解析

一.IP地址 IP地址的组成方式:网络号 主机号 可以这样理解,根据网络号找路由器,根据主机号找连着路由器的主机 早期分类的IP地址 表示如下: 其中,有些特殊的IP地址: 主机号全为0,表示本网…

HTML组件上传

<!doctype html> <html> <head> <meta charset"utf-8"> <title>无标题文档</title> </head><fieldset style"width: 200px"><legend>文本组建上传</legend><form action"#" me…

Docker Compose运行Elasticsearch

前提&#xff1a;确保你已经安装了Docker和Docker Compose 创建项目目录 创建一个目录来存放项目文件 mkdir es cd es 创建docker-compose.yml文件 touch docker-compose.yml version: 3.3 services: elasticsearch: image: docker.elastic.co/elasticsearch/elastics…

三、Kafka副本

2、创建2个分区两个副本 /usr/local/kafka/bin# ./kafka-topics.sh --bootstrap-server 192.168.58.130:9092 --create --topic atguigu2 --partitions 2 --replication-factor 23、查看topic详细信息 /usr/local/kafka/bin# ./kafka-topics.sh --bootstrap-server 192.168.5…

享受滥用 C 语言的乐趣

c语言在线书籍 程序员导航网站 当我再次翻阅《Expert C Programming》这本书时&#xff0c;我偶然发现了国际模糊 C 代码竞赛的“轻松”部分。这是一场编写最晦涩难懂的代码的竞赛。C 语言有一个编写令人困惑的代码的竞赛&#xff0c;这可能说明了该语言的一些问题。我想看看…

【人工智能】如何在白嫖的阿里云PAI平台上跑模型?

在“交互式建模&#xff08;DSW&#xff09;”中新建实例&#xff0c;阿里云自带的示例镜像是很少的&#xff0c;所以我们只需要筛选出适合你的项目的CUDA版本就好。DSW实例可以看作是一个Linux虚拟机&#xff0c;之后我们在实例中新建另一个Python环境使用即可。 新建完实例后…

两种用MATLAB绘制色块的方法

绘制色块首先可以想到用填充像素的方式 % 定义图像的尺寸 imageSize 500;% 创建一个 imageSize x imageSize x 3 的矩阵&#xff0c;每个像素都是绿色 % RGB颜色模型中绿色的值为 [0, 1, 0] greenImage zeros(imageSize, imageSize, 3); greenImage(:, :, 2) ones(imageSiz…

24/8/15算法笔记 dp策略迭代 价值迭代

策略迭代&#xff1a; 策略迭代从某个策略开始&#xff0c;计算该策略下的状态价值函数。它交替进行两个步骤&#xff1a;策略评估&#xff08;Policy Evaluation&#xff09;和策略改进&#xff08;Policy Improvement&#xff09;。在策略评估阶段&#xff0c;计算给定策略下…