1、背景:樓主也是親身經歷了tp3.2.3的緩存漏洞,導致外包項目被各種木馬毒害,還好最終解決了。
2、解決方案:
1)清除所有毒害文件(難度較高),有備份的直接刪除整個項目,拿備份文件替換(數據庫被毒害的話,也全部替換)
2)更新補丁:具體步驟=》
step1:
修復方案也很簡單 打開文件:thinkphp\library\think\cache\driver\File.php 找到 : public function set($name, $value, $expire = null){ 方法 添加:$data = str_replace(PHP_EOL, '', $data); 如下:
step2:
修改config.php里緩存配置:
//緩存安全相關 -- security 'DATA_CACHE_KEY'=>'lvyou', 'DATA_CACHE_PREFIX'=>'你的緩存文件前綴', //這樣木馬就找不到文件 'DATA_CACHE_SUBDIR' => true, // 使用子目錄緩存 (根據緩存標識的哈希創建子目錄) 'DATA_PATH_LEVEL' => 1, // 子目錄緩存級別
到這里,就可以解決緩存木馬問題。
那么,木馬是怎么產生的呢?參考這篇文章:https://newsn.net/say/thinkphp-bug-cache.html 和 https://blog.csdn.net/qq_35669659/article/details/89372025 ,
里面講解了S() 方法 + 關鍵突破口是%0a
,它產生了一個換行符
是產生木馬的原因。
這里我多講兩句:因為tp3框架初始化的時候,會調用 hooks初始化,即:
Application\Common\Behavior\InitHookBehavior\run 方法,里面有個 S(‘hooks’,Hook::get())調用,
所以 黑客自然知道了 緩存文件名 是 md5('這個不能放出來,不然漏洞傳播更廣泛').php,然后就發生了不幸的事情。