本系列文章将针对 ThinkPHP 的历史漏洞进行分析,今后爆出的所有 ThinkPHP 漏洞分析,也将更新于 ThinkPHP-Vuln 项目上。本篇文章,将分析 ThinkPHP 中存在的 文件包含 漏洞。

漏洞概要

本次漏洞存在于 ThinkPHP 模板引擎中,在加载模版解析变量时存在变量覆盖问题,而且程序没有对数据进行很好的过滤,最终导致 文件包含漏洞 的产生。漏洞影响版本: 5.0.0<=ThinkPHP5<=5.0.18 、5.1.0<=ThinkPHP<=5.1.10。

漏洞环境

通过以下命令获取测试环境代码:composer create-project --prefer-dist topthink/think=5.0.18 tpdemo

将 composer.json 文件的 require 字段设置成如下:"require": {

"php": ">=5.6.0",

"topthink/framework": "5.0.18"

},

然后执行 composer update ,并将 application/index/controller/Index.php 文件代码设置如下:<?php

namespace app\index\controller;

use think\Controller;

class Index extends Controller

{

public function index()

{

$this->assign(request()->get());

return $this->fetch(); // 当前模块/默认视图目录/当前控制器(小写)/当前操作(小写).html

}

}

创建 application/index/view/index/index.html 文件,内容随意(没有这个模板文件的话,在渲染时程序会报错),并将图片马 1.jpg 放至 public 目录下(模拟上传图片操作)。接着访问 http://localhost:8000/index/index/index?cacheFile=demo.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 被覆盖后的变量值。

攻击总结

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

文件包含漏洞不能包含php,ThinkPHP5漏洞分析之文件包含相关推荐

  1. thinkphp5/phpstudy分析入口文件index.php及localhost和配置域名访问网站根目录www

    文章目录 1.thinkphp5入口文件简介 2.访问网站根目录www (1)localhost访问网站根目录www (2)配置域名访问网站根目录www 第一步:点击站点域名管理 第二步:站点域名设置 ...

  2. 【Android 逆向】APK 文件处理脚本 ApkTool.py ( 脚本简介 | 用法 | 分析 APK 文件 )

    文章目录 一.APK 文件处理脚本 ApkTool.py 二.ApkTool.py 脚本用法 三.ApkTool.py 脚本分析 APK 输出结果 一.APK 文件处理脚本 ApkTool.py Ap ...

  3. 数据压缩作业二——分析tga文件

    数据压缩作业二--分析tga文件 文章目录 数据压缩作业二--分析tga文件 一.TGA格式文件概述 二.使用二进制编辑软件分析tga文件 1.TGA文件头(TGA FILE HEADER) 2. 图 ...

  4. php post 漏洞_文件包含上传漏洞目录遍历命令执行漏洞

    制丨阿星 来源丨freebuff 作者丨Deutsh 文件上传漏洞: 一句话木马 一句话木马主要由两部分组成:执行函数与 接收被执行代码的变量 执行函数: eval() assert() create ...

  5. php远程文件包含攻击,利用SMB共享来绕过php远程文件包含的限制

    在这篇博文中,我将为大家演示如何利用PHP应用中的远程文件包含漏洞的技术.我们将绕过php远程文件包含的限制,并执行RFI的利用,即使PHP环境被配置为不包含来自远程HTTP/FTP URL的文件. ...

  6. 挖洞经验:通过Vimeo的文件上传功能发现其SSRF漏洞

    漏洞发现过程 之前我一直在学校学习我比较讨厌的科目知识,所以最近我决定放松休息一下,我告诉自己必须要在HackerOne平台中的Vimeo漏洞众测中有所发现.于是,我就直接想测试一下Vimeo平台的上 ...

  7. fckeditor漏洞_三十,文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防御

    一.编辑器漏洞 1.编辑器 编辑器属于第三方软件,它的作用是方便网站管理员上传或编辑网站上的内容,类似我们电脑上的Word文档. 编辑器通常分为两种情况: (1) 不需要后台验证,可以直接在前台访问且 ...

  8. 文件上传漏洞、WebShell、防御及绕过利用、Web容器解析漏洞、编辑器上传漏洞

    文章目录 文件上传漏洞 漏洞概述 漏洞成因 漏洞危害 WebShell 大马 小马 GetShell 漏洞利用的条件 PUT方法上传文件 漏洞的防御.绕过和利用 黑白名单策略 安装upload-lab ...

  9. Goby 漏洞更新 |海康威视部分iVMS系统存在文件上传漏洞

    漏洞名称:海康威视部分iVMS系统存在文件上传漏洞 English Name:Some Hikvision iVMS file upload vulnerabilitie CVSS core: 9.8 ...

  10. php上传漏洞绕过gd库,jQuery File Upload任意文件上传漏洞

    事件背景 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个JavaScript代码库(或JavaScript框架).jQuery File Upload一个jQ ...

最新文章

  1. Android4.0 Design之UI设计易犯的错误1
  2. 微信公众平台入门开发教程.Net(C#)框架
  3. Centos 7 mysql Buffered warning: Changed limits: max_connections: 214 解决方法
  4. 7-4 统计一行文本的单词个数 (15 分)
  5. h.264 视频解码的一点小经验
  6. VC++ COleSafeArray VARIANT的使用
  7. 蓝桥杯 ALGO-92 算法训练 前缀表达式
  8. 2.1 matlab特殊矩阵(零矩阵、幺矩阵、单位矩阵、魔方矩阵、范德蒙德矩阵和希尔伯特矩阵)
  9. Jackson 生成xml格式文件
  10. 解读《美国国家BIM标准》– BIM能力成熟度模型(十一)
  11. 最新服务器处理器天梯,服务器cpu天梯图2020
  12. 计算机键盘上fn键,笔记本电脑键盘上Fn键的详细介绍
  13. html5方框的箭头怎么弄,纯CSS-带箭头的DIV方框
  14. as3.0 当fla里面有TLF文本的时候,加载声音会出现错误
  15. 先验分布 后验分布 似然估计
  16. ioredis.js tutorial
  17. 2020年前端学习的新路径
  18. 基于vue框架的二手书交易网站
  19. 量子计算机错误率,读创--迄今错误率最低量子比特面世 有望推进量子计算机研发...
  20. 【题解】同济线代习题二 8.1

热门文章

  1. Spring MVC--接收JSON格式的数据
  2. mybatisplus查询今天的数据_MybatisPlus(CRUD)
  3. centos中如何找出系统中 load 高时处于运行队列的进程
  4. QT pro文件解析
  5. 2013 JavaB2 马虎的算式
  6. 1.2.1 计算机系统的组成(硬件+软件)
  7. PHP语言Yii框架,Yii框架多语言站点配置方法分析【中文/英文切换站点】
  8. vant 做表格_Vant List 列表
  9. python列表片段_Python列表片段索引操作,python
  10. 开发者们看过来,8ms开发工具平台给大家送福利了!只要你来,肯定有你感兴趣的,3.6-3.10日,只要在8ms平台上创建项目,就有机会白嫖彩屏开发板哦