溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ThinkPHP中存在的文件包含漏洞有哪些

發(fā)布時(shí)間:2021-11-12 11:18:11 來(lái)源:億速云 閱讀:182 作者:小新 欄目:網(wǎng)絡(luò)管理

這篇文章主要介紹ThinkPHP中存在的文件包含漏洞有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

漏洞概要

本次漏洞存在于 ThinkPHP 模板引擎中,在加載模版解析變量時(shí)存在變量覆蓋問(wèn)題,而且程序沒(méi)有對(duì)數(shù)據(jù)進(jìn)行很好的過(guò)濾,最終導(dǎo)致 文件包含漏洞 的產(chǎn)生。漏洞影響版本: 5.0.0<=ThinkPHP5<=5.0.18 、5.1.0<=ThinkPHP<=5.1.10。

漏洞環(huán)境

通過(guò)以下命令獲取測(cè)試環(huán)境代碼:

composer create-project --prefer-dist topthink/think=5.0.18 tpdemo

composer.json 文件的 require 字段設(shè)置成如下:

"require": {
    "php": ">=5.6.0",
    "topthink/framework": "5.0.18"
},

然后執(zhí)行 composer update ,并將 application/index/controller/Index.php 文件代碼設(shè)置如下:

<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
    public function index()
    {
        $this->assign(request()->get());
        return $this->fetch(); // 當(dāng)前模塊/默認(rèn)視圖目錄/當(dāng)前控制器(小寫(xiě))/當(dāng)前操作(小寫(xiě)).html
    }
}

創(chuàng)建 application/index/view/index/index.html 文件,內(nèi)容隨意(沒(méi)有這個(gè)模板文件的話,在渲染時(shí)程序會(huì)報(bào)錯(cuò)),并將圖片馬 1.jpg 放至 public 目錄下(模擬上傳圖片操作)。接著訪問(wèn) http://localhost:8000/index/index/index?cacheFile=demo.php 鏈接,即可觸發(fā) 文件包含漏洞 。ThinkPHP中存在的文件包含漏洞有哪些

漏洞分析

首先在官方發(fā)布的 5.0.19 版本更新說(shuō)明中,發(fā)現(xiàn)其中提到該版本包含了一個(gè)安全更新。ThinkPHP中存在的文件包含漏洞有哪些我們可以查閱其 commit 記錄,發(fā)現(xiàn)其改進(jìn)了模板引擎,其中存在危險(xiǎn)函數(shù) extract ,有可能引發(fā)變量覆蓋漏洞。接下來(lái),我們直接跟進(jìn)代碼一探究竟。ThinkPHP中存在的文件包含漏洞有哪些首先,用戶可控?cái)?shù)據(jù)未經(jīng)過(guò)濾,直接通過(guò) Controller 類的 assign 方法進(jìn)行模板變量賦值,并將可控?cái)?shù)據(jù)存在 think\View 類的 data 屬性中。ThinkPHP中存在的文件包含漏洞有哪些接著,程序開(kāi)始調(diào)用 fetch 方法加載模板輸出。這里如果我們沒(méi)有指定模板名稱,其會(huì)使用默認(rèn)的文件作為模板,模板路徑類似 當(dāng)前模塊/默認(rèn)視圖目錄/當(dāng)前控制器(小寫(xiě))/當(dāng)前操作(小寫(xiě)).html ,如果默認(rèn)路徑模板不存在,程序就會(huì)報(bào)錯(cuò)。ThinkPHP中存在的文件包含漏洞有哪些我們跟進(jìn)到 Template 類的 fetch 方法,可以發(fā)現(xiàn)可控變量 $vars 賦值給 $this->data 并最終傳入 File 類的 read 方法。而 read 方法中在使用了 extract 函數(shù)后,直接包含了 $cacheFile 變量。這里就是漏洞發(fā)生的關(guān)鍵原因(可以通過(guò) extract 函數(shù),直接覆蓋 $cacheFile 變量,因?yàn)?extract 函數(shù)中的參數(shù) $vars 可以由用戶控制)。ThinkPHP中存在的文件包含漏洞有哪些

漏洞修復(fù)

官方的修復(fù)方法是:先將 $cacheFile 變量存儲(chǔ)在 $this->cacheFile 中,在使用 extract 函數(shù)后,最終 include 的變量是 $this->cacheFile ,這樣也就避免了 include 被覆蓋后的變量值。ThinkPHP中存在的文件包含漏洞有哪些

攻擊總結(jié)

最后,再通過(guò)一張攻擊流程圖來(lái)回顧整個(gè)攻擊過(guò)程。ThinkPHP中存在的文件包含漏洞有哪些

以上是“ThinkPHP中存在的文件包含漏洞有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI