我們ESAFE安全的網站安全監測平臺發現,thinkphp官方6.0版本被爆出高危
的網站代碼漏洞,該漏洞可導致網站被植入網站木馬後門檔也叫webshell,具體產生的原因
是session ID參數值這裡並未對其做詳細的安全過濾與效驗,導致可以遠端修改POST資料包將
session的值改為惡意的後門代碼,發送到伺服器後端並生成PHP檔直接生成,可導致網站被
攻擊,伺服器被入侵,關於該thinkphp漏洞的詳情,我們ESAFE安全來跟大家分析一下。
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任意檔上傳漏洞,我們ESAFE安全工程師來進行詳細的安全
分析與代碼的安全檢測,再index控制器裡我們發現可以寫入session來進行控制代碼,首先我們
看下代碼:如下圖所示
以上代碼是用來獲取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)我們來追蹤下這個函數接下來使用到是哪裡的值,看下圖:
原來是追蹤到了sessionID值裡去了,也就是POST資料包裡的phpsessid,導致該值可以在遠端
進行偽造與篡改,漏洞利用截圖:
經過我們esafe安全的網站安全測試發現,thinkphp的漏洞利用條件是伺服器開啟session功能,
默認代碼是不開啟的,有些協力廠商開發公司在給客戶網站以及平臺開發的時候會用到session
功能來控制使用者的登錄狀態以及許可權所屬判斷,可導致網站被攻擊,被篡改,資料庫內容被
修改等攻擊情況的發生,在這裡我們建議網站的運營者對該代碼漏洞進行修復,對session的
判斷以及寫入做攔截與效驗,不允許直接.php檔的session值寫入,如果您對代碼不是太懂
的話也可以找專業的網站安全公司來幫您修復網站漏洞。