【PHP】tp3.2.X緩存漏洞之一句話過狗及修復方案


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,然后就發生了不幸的事情。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM