前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ThinkPHP5漏洞分析之文件包含丨代码审计

ThinkPHP5漏洞分析之文件包含丨代码审计

作者头像
C4rpeDime
发布2020-01-20 10:54:01
1.9K0
发布2020-01-20 10:54:01
举报
文章被收录于专栏:黑白安全黑白安全

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

漏洞概要

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

漏洞环境

通过以下命令获取测试环境代码:

代码语言:javascript
复制
composer create-project --prefer-dist topthink/think=5.0.18 tpdemo

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

代码语言:javascript
复制
"require": {
    "php": ">=5.6.0",
    "topthink/framework": "5.0.18"
},

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

代码语言:javascript
复制
<?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链接,即可触发文件包含漏洞

ThinkPHP5漏洞分析之文件包含丨代码审计
ThinkPHP5漏洞分析之文件包含丨代码审计

漏洞分析

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

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

ThinkPHP5漏洞分析之文件包含丨代码审计
ThinkPHP5漏洞分析之文件包含丨代码审计

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

ThinkPHP5漏洞分析之文件包含丨代码审计
ThinkPHP5漏洞分析之文件包含丨代码审计

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

ThinkPHP5漏洞分析之文件包含丨代码审计
ThinkPHP5漏洞分析之文件包含丨代码审计

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

ThinkPHP5漏洞分析之文件包含丨代码审计
ThinkPHP5漏洞分析之文件包含丨代码审计

漏洞修复

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

ThinkPHP5漏洞分析之文件包含丨代码审计
ThinkPHP5漏洞分析之文件包含丨代码审计

攻击总结

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

ThinkPHP5漏洞分析之文件包含丨代码审计
ThinkPHP5漏洞分析之文件包含丨代码审计

 • end • 

文由微信公众号红日安全

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-045,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 漏洞概要
  • 漏洞环境
  • 漏洞修复
  • 攻击总结
相关产品与服务
脆弱性检测服务
脆弱性检测服务(Vulnerability detection Service,VDS)在理解客户实际需求的情况下,制定符合企业规模的漏洞扫描方案。通过漏洞扫描器对客户指定的计算机系统、网络组件、应用程序进行全面的漏洞检测服务,由腾讯云安全专家对扫描结果进行解读,为您提供专业的漏洞修复建议和指导服务,有效地降低企业资产安全风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档