【漏洞預警】ThinkPHP 5.0再曝遠程代碼執行漏洞

2019年1月11日,白帽匯安全研究院發現thinkphp官網發布了安全更新,修復了一個遠程代碼執行漏洞。主要影響的版本為5.0.0~5.0.23版本。

此次爆出漏洞的ThinkPHP 5.x版本是官方於2015年發布的新一代框架,其中5.0版本於2016年的9月份布。在不久之前,ThinkPHP 5.x版本就曝出遠程代碼執行漏洞。短短兩三個月後,ThinkPHP 5.0 就又曝出了新的遠程代碼執行漏洞,這說明其框架在安全方面有較大缺陷,預計在日後會遭受更嚴峻的考驗。

概況

ThinkPHP誕生於2006年,是一個國產開源的PHP開發框架,其借鑒了Struts框架的Action對象,同時也使用面向對象的開發結構和MVC模式。ThinkPHP可在Windows和Linux等操作系統運行,支持MySql,Sqlite和PostgreSQL等多種資料庫以及PDO擴展,是一款跨平台,跨版本以及簡單易用的PHP框架。

目前FOFA系統最新數據(一年內數據)顯示全球範圍內共有266459個ThinkPHP網站對外開放服務。中國大陸地區使用數量最多,共有143230台,美國第二,共有46348台,中國香港特別行政區第三,共有15453台,印度尼西亞第四,共有4969台。

全球範圍內ThinkPHP網站分布情況(僅為分布情況,非漏洞影響情況)

中國大陸地區浙江省使用用數量最多,共有81746台;北京市第二,共有25961台,廣東省第三,共有6899台,上海市第四,共有3963台,四川省第五,共有3767台。

中國大陸範圍內ThinkPHP網站分布情況(僅為分布情況,非漏洞影響情況)

危害等級

嚴重

漏洞原理

本次以5.0.20版本為例。

本次漏洞觸發點在Request.php文件里的method方法中,該方法的功能主要是判斷請求類型。

跟進method方法,這裡判斷是否存在var_method,如果存在則執行$this->{$this->method}($_POST);

在config.php中,可以看到 var_method 是表單請求偽變數,其默認值為 _method。

這裡可以POST _method=__construct用構造函數來進行變數覆蓋,實現命令執行。

在構造函數中,會判斷其傳入參數的key是否是該類屬性,如果是,則將對應的value賦值給該屬性,可以進行變數覆蓋。

再看全局過濾函數filtervalue,根據上一步的變數覆蓋,POST filter[]=system,將$filter賦值為array(system),同時POST 123456=whoami,觸發過濾函數,調用call_user_func方法,執行whoami命令。

復現結果:

漏洞影響

目前漏洞影響版本號包括:

5.x <= 5.0.23

以下基於ThinkPHP 5 二次開發的內容管理系統,很可能受到該漏洞影響,建議廠商及時更新。

AdminLTE後台管理系統
layui後台管理系統
thinkcmf
H-ui.admin後台管理系統
tpshop
FsatAdmin
eyoucms
LarryCMS後台管理系統
tpadmin後台管理系統
snake後台管理系統
ThinkSNS
DolphinPHP後台管理系統
WeMall商城系統
CLTPHP
齊博CMS
DSMALL
YFCMF
HisiPHP後台管理系統
Tplay後台管理系統
lyadmin後台管理系統
haoid後台管理系統

漏洞POC

目前FOFA客戶端平台已經更新該ThinkPHP漏洞的檢測POC。

POC截圖

CVE編號

暫無

修復建議

1、官網已發布安全更新,用戶可以通過網址thinkphp.cn/topic/60992獲得。

2、如暫時無法更新到最新版本,建議直接參考最新版本的Request類的method方法進行手動修復。參考網址:blog.thinkphp.cn/910675

3、建議使用以上ThinkPHP 5 開發的內容管理系統的用戶及時檢查是否存在該漏洞。

參考

[1] baike.baidu.com/item/th

[2] blog.thinkphp.cn/910675

[3] thinkphp.cn/

來源:【漏洞預警】ThinkPHP 5.0再曝遠程代碼執行漏洞

白帽匯從事信息安全,專註於安全大數據、企業威脅情報。

公司產品:FOFA-網路空間安全搜索引擎、FOEYE-網路空間檢索系統、NOSEC-安全訊息平台。

為您提供:網路空間測繪、企業資產收集、企業威脅情報、應急響應服務。


推薦閱讀:

TAG:ThinkPHP | Web漏洞 | 信息安全 |