這篇文章主要介紹ThinkPHP中存在的文件包含漏洞有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比西烏珠穆沁網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式西烏珠穆沁網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋西烏珠穆沁地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。
本次漏洞存在于 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
。
通過(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è)置如下:
assign(request()->get()); return $this->fetch(); // 當(dāng)前模塊/默認(rèn)視圖目錄/當(dāng)前控制器(小寫)/當(dāng)前操作(小寫).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ā) 文件包含漏洞
。
首先在官方發(fā)布的 5.0.19
版本更新說(shuō)明中,發(fā)現(xiàn)其中提到該版本包含了一個(gè)安全更新。我們可以查閱其 commit
記錄,發(fā)現(xiàn)其改進(jìn)了模板引擎,其中存在危險(xiǎn)函數(shù) extract
,有可能引發(fā)變量覆蓋漏洞。接下來(lái),我們直接跟進(jìn)代碼一探究竟。首先,用戶可控?cái)?shù)據(jù)未經(jīng)過(guò)濾,直接通過(guò) Controller
類的 assign
方法進(jìn)行模板變量賦值,并將可控?cái)?shù)據(jù)存在 think\View
類的 data
屬性中。接著,程序開始調(diào)用 fetch
方法加載模板輸出。這里如果我們沒(méi)有指定模板名稱,其會(huì)使用默認(rèn)的文件作為模板,模板路徑類似 當(dāng)前模塊/默認(rèn)視圖目錄/當(dāng)前控制器(小寫)/當(dāng)前操作(小寫).html
,如果默認(rèn)路徑模板不存在,程序就會(huì)報(bào)錯(cuò)。我們跟進(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
可以由用戶控制)。
官方的修復(fù)方法是:先將 $cacheFile
變量存儲(chǔ)在 $this->cacheFile
中,在使用 extract
函數(shù)后,最終 include
的變量是 $this->cacheFile
,這樣也就避免了 include
被覆蓋后的變量值。
最后,再通過(guò)一張攻擊流程圖來(lái)回顧整個(gè)攻擊過(guò)程。
以上是“ThinkPHP中存在的文件包含漏洞有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!