微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 app\index\controller;
use \think\Controller;
class Index extends Controller
{
    public function index()
    {
         $this->assign($this->request->get());
         return $this->fetch("index");  //当前的模块/view目录/当前控制器/当前操作  这里我定义了一个index模块
         

    }
}

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

主要问题出现在fetch 这里 

细跟一下fetch 

 

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

这里的 $method 的值为fetch  可以在view\driver\Think.PHP 视图引擎

这里要跟到think\templae.PHP

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

 

 

 然后我们去跟read , 

 关键的部分:

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

 

 

原本cacheFIle的值:

E:\PHPstudy\PHPTutorial\WWW\tp5.0.15\runtime\temp\cb64592f1fa49f590673c9beddff4365.PHP

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

我们输入的cacheFile=echod.txt

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

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


 





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

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








 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐