天天看點

thinkphp 漏洞修複方案之<6.X版本的代碼漏洞案例分析

大年初五,根據我們SINE安全的網站安全監測平台發現,thinkphp官方6.0版本被爆出高危的網站代碼漏洞,該漏洞可導緻網站被植入網站木馬後門檔案也叫webshell,具體産生的原因是session ID參數值這裡并未對其做詳細的安全過濾與校驗,導緻可以遠端修改POST資料包将session的值改為惡意的後門代碼,發送到伺服器後端并生成PHP檔案直接生成,可導緻網站被攻擊,伺服器被入侵,關于該thinkphp漏洞的詳情,我們SINE安全來跟大家分析一下。

thinkphp 漏洞修複方案之<6.X版本的代碼漏洞案例分析

thinkphp是國内用的比較多的一套開源系統,采用的是php+mysql架構開發,基于該架構的開發較容易與維護,深受很多站長以及企業的青睐,2018-2019年thinkphp的漏洞就層出不窮,像之前的3.23版本,ThinkPHP 5.0緩存漏洞、ThinkPHP 5.0.10、ThinkPHP5.0.12、ThinkPHP5.0.13、ThinkPHP5.0.23、thinkphp 5.0.22版本都存在這漏洞。

目前的新版本6.0存在着session任意檔案上傳漏洞,我們SINE安全工程師來進行詳細的安全分析與代碼的安全檢測,再index控制器裡我們發現可以寫入session來進行控制代碼,首先我們看下代碼:如下圖所示

thinkphp 漏洞修複方案之<6.X版本的代碼漏洞案例分析

以上代碼是用來擷取name的參數值并将值裡的内容寫到session中去,我們來本地搭建一套TP6.0版本的環境,來測試一下生成的session檔案會到哪裡去。http://測試網址/tp6/public/index.php/index/testsession?name=<?php%20phpinfo();?>當get 通路該頁面的時候就會在網站根目錄下的runtime檔案夾裡的session目錄下生成一個PHP檔案,我們可以看得到。那到底是那段代碼導緻可以寫入檔案名的呢?我們仔細看下TP架構裡的store.php代碼,追蹤到253到270行這裡,調用了一個參數來進行寫入檔案的操作,writefile($filename,$data)我們來追蹤下這個函數接下來使用到是哪裡的值,看下圖:

thinkphp 漏洞修複方案之&lt;6.X版本的代碼漏洞案例分析

原來是追蹤到了sessionID值裡去了,也就是POST資料包裡的phpsessid,導緻該值可以在遠端進行僞造與篡改,漏洞利用截圖:

thinkphp 漏洞修複方案之&lt;6.X版本的代碼漏洞案例分析

經過我們SINE安全的網站安全測試發現,thinkphp的漏洞利用條件是伺服器開啟session功能,預設代碼是不開啟的,有些第三方開發公司在給客戶網站以及平台開發的時候會用到session功能來控制使用者的登入狀态以及權限所屬判斷,可導緻網站被攻擊,被篡改,資料庫内容被修改等攻擊情況的發生,在這裡我們建議網站的營運者對該代碼漏洞進行修複,對session的判斷以及寫入做攔截與效驗,不允許直接.php檔案的session值寫入,如果您對代碼不是太懂的話也可以找專業的網站安全公司來幫您修複網站漏洞