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