zoukankan      html  css  js  c++  java
  • thinkphp 5.x~3.x 文件包含漏洞分析

    漏洞描述:

    ThinkPHP在加载模版解析变量时存在变量覆盖的问题,且没有对 $cacheFile 进行相应的消毒处理,导致模板文件的路径可以被覆盖,从而导致任意文件包含漏洞的发生。

    主要还是变量覆盖的问题。

    漏洞范围:

    漏洞影响版本: 5.0.0<=ThinkPHP5<=5.0.18 、5.1.0<=ThinkPHP<=5.1.10

    本地复现环境:

    tp5.0.15   php version :7.0.12

    <?php
    namespace appindexcontroller;
    use 	hinkController;
    class Index extends Controller
    {
        public function index()
        {
             $this->assign($this->request->get());
             return $this->fetch("index");  //当前的模块/view目录/当前控制器/当前操作  这里我定义了一个index模块
             
    
        }
    }

    assign方法 进行了模板变量赋值  ,把可控数据存在 hinkView 

    主要问题出现在fetch 这里 

    细跟一下fetch 

    fetch 前面的方法 主要是加载模板输出 

    这里的 $method 的值为fetch  可以在viewdriverThink.php 视图引擎

    这里要跟到think emplae.php

    在读取的时候采用了一个read的方法。

     然后我们去跟read , 

     关键的部分:

    这里extract 该函数使用数组键名作为变量名, EXTR_OVERWRITE 变量存在则覆盖

    原本cacheFIle的值:

    E:phpstudyPHPTutorialWWW	p5.0.15
    untime	empcb64592f1fa49f590673c9beddff4365.php

    被覆盖成 echod.txt
    * @param array $vars 模板输出变量

    我们输入的cacheFile=echod.txt

    通过extract 该函数使 数组键名作为变量名
    变成$cacheFile=echod.txt

    最后的inclde $cacheFile; 触发 任意文件包含漏洞。






    这个洞在thinkCMF 后台的一个upload处可以复现。

    如果,allow_url_include 开启,可利用此处 执行任意代码








     
  • 相关阅读:
    java新手的session初体验
    菜鸟身份看泛型
    Java初学者不可不知的MyEclipse的设置技巧(自动联想功能)
    GCT之数学公式(几何部分)
    GCT之数学公式(代数部分)
    GCT之语文细节知识
    单元测试的方法
    常用的测试方法
    SQL 经典语句大全
    待处理(一)
  • 原文地址:https://www.cnblogs.com/0xdd/p/10848576.html
Copyright © 2011-2022 走看看