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 開啟,可利用此處 執行任意代碼








 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM