大年初五,根據我們SINE安全的網站安全監(jiān)測平臺發(fā)現(xiàn),thinkphp官方6.0版本被爆出高危的網站代碼漏洞,該漏洞可導致網站被植入網站木馬后門文件也叫webshell,具體產生的原因是session ID參數(shù)值這里并未對其做詳細的安全過濾與效驗,導致可以遠程修改POST數(shù)據包將session的值改為惡意的后門代碼,發(fā)送到服務器后端并生成PHP文件直接生成,可導致網站被攻擊,服務器被入侵,關于該thinkphp漏洞的詳情,我們SINE安全來跟大家分析一下。
thinkphp是國內用的比較多的一套開源系統(tǒng),采用的是php+mysql架構開發(fā),基于該框架的開發(fā)較容易與維護,深受很多站長以及企業(yè)的青睞,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控制器里我們發(fā)現(xiàn)可以寫入session來進行控制代碼,首先我們看下代碼:如下圖所示
以上代碼是用來獲取name的參數(shù)值并將值里的內容寫到session中去,我們來本地搭建一套TP6.0版本的環(huán)境,來測試一下生成的session文件會到哪里去。http://測試網址/tp6/public/index.php/index/testsession?name=當get 訪問該頁面的時候就會在網站根目錄下的runtime文件夾里的session目錄下生成一個PHP文件,我們可以看得到。那到底是那段代碼導致可以寫入文件名的呢?我們仔細看下TP框架里的store.php代碼,追蹤到253到270行這里,調用了一個參數(shù)來進行寫入文件的操作,writefile($filename,$data)我們來追蹤下這個函數(shù)接下來使用到是哪里的值,看下圖:
原來是追蹤到了sessionID值里去了,也就是POST數(shù)據包里的phpsessid,導致該值可以在遠程進行偽造與篡改,漏洞利用截圖:
經過我們SINE安全的網站安全測試發(fā)現(xiàn),thinkphp的漏洞利用條件是服務器開啟session功能,默認代碼是不開啟的,有些第三方開發(fā)公司在給客戶網站以及平臺開發(fā)的時候會用到session功能來控制用戶的登錄狀態(tài)以及權限所屬判斷,可導致網站被攻擊,被篡改,數(shù)據庫內容被修改等攻擊情況的發(fā)生,在這里我們建議網站的運營者對該代碼漏洞進行修復,對session的判斷以及寫入做攔截與效驗,不允許直接.php文件的session值寫入,如果您對代碼不是太懂的話也可以找專業(yè)的網站安全公司來幫您修復網站漏洞
申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!